Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不停止BroadcastReceiver中的当前歌曲_Java_Android - Fatal编程技术网

Java 不停止BroadcastReceiver中的当前歌曲

Java 不停止BroadcastReceiver中的当前歌曲,java,android,Java,Android,我正在尝试一个音乐应用程序。 我使用MediaPlayer对象和 我的音乐在广播电台播放。 当我触摸列表中的任何歌曲时,音乐正在播放。 但我的停止、重置或暂停功能不起作用 MediaPlayerBroadcast.java public class MediaPlayerBroadcast extends BroadcastReceiver { private MediaPlayer mPlayer = new MediaPlayer(); @Override pub

我正在尝试一个音乐应用程序。 我使用MediaPlayer对象和 我的音乐在广播电台播放。 当我触摸列表中的任何歌曲时,音乐正在播放。 但我的停止、重置或暂停功能不起作用

MediaPlayerBroadcast.java

public class MediaPlayerBroadcast extends BroadcastReceiver {

    private MediaPlayer mPlayer = new MediaPlayer();

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle get_extras      = intent.getExtras();
        if(get_extras.getString("music_name").equals("stop")) {
                mPlayer.stop();
        }
        else {
            String url      = "http://www.tupbebekailesi.com/musics/" + get_extras.getString("music_name");
            mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            try {
                mPlayer.setDataSource(url);
            } catch (IllegalArgumentException e) {
                Toast.makeText(context, "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
            } catch (SecurityException e) {
                Toast.makeText(context, "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
            } catch (IllegalStateException e) {
                Toast.makeText(context, "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                mPlayer.prepare();
            } catch (IllegalStateException e) {
                Toast.makeText(context, "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
            } catch (IOException e) {
                Toast.makeText(context, "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
            }
            mPlayer.start();
        }
    }

}
和MusicActivity.java

public class MusicActivity extends Fragment implements AdapterView.OnItemClickListener {

    private ListView music_list;
    private MusicAdapter musicAdapter;
    private List<String> music_list_name;
    private Button stop_music;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView       = inflater.inflate(R.layout.music_activity,container,false);
        music_list          = (ListView) rootView.findViewById(R.id.music_list);
        stop_music          = (Button) rootView.findViewById(R.id.stop);

        music_list_name     = new ArrayList<String>();
        music_list_name.add("deadmau5-Alone-With-You.mp3");
        music_list_name.add("deadmau5-Bad-Selection.mp3");
        music_list_name.add("Deadmau5-Clockwork.mp3");
        music_list_name.add("Deadmau5-Faxing-Berlin.mp3");
        music_list_name.add("Deadmau5-Ghosts-n-Stuff.mp3");

        music_list.setOnItemClickListener(this);

        stop_music.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent start_music  = new Intent("com.olkun.medyasef.merhaba");
                //Here I am stop music.
                start_music.putExtra("music_name","stop");
                getActivity().sendBroadcast(start_music);

            }
        });

        musicAdapter        = new MusicAdapter(getActivity(),music_list_name);
        music_list.setAdapter(musicAdapter);
        return rootView;

    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String name = music_list_name.get(position);
        Log.d("BASLA",name);

        //here I am start any music.
        Intent start_music  = new Intent("com.olkun.medyasef.merhaba");
        start_music.putExtra("music_name",name);
        getActivity().sendBroadcast(start_music);
    }


    private class MusicAdapter extends BaseAdapter {

        private Context mContext;
        private List<String> music_array_list;



        private MusicAdapter(Context mContext, List<String> music_array_list) {
            this.mContext = mContext;
            this.music_array_list = music_array_list;
        }

        @Override
        public int getCount() {
            return music_array_list.size();
        }

        @Override
        public String getItem(int position) {
            return music_array_list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertview, ViewGroup parent) {
            ViewHolder holder           = null;
            String music_list           = getItem(position);

            if(convertview == null){
                convertview         = LayoutInflater.from(mContext).inflate(R.layout.music_activity_area,parent,false);
                holder              = new ViewHolder();
                holder.music_name   = (TextView) convertview.findViewById(R.id.music_name);
                convertview.setTag(holder);
            }
            else {
                holder = (ViewHolder) convertview.getTag();
            }
            holder.music_name.setText(music_list);

            return convertview;
        }
    }

    /*private view holder class*/
    private class ViewHolder {
        TextView music_name;
    }

}
公共类MusicActivity扩展片段实现AdapterView.OnItemClickListener{
私有列表查看音乐列表;
私人音乐播音员音乐播音员;
私人音乐列表名称;
私人按钮停止音乐;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(R.layout.music\u活动,容器,false);
music\u list=(ListView)rootView.findviewbyd(R.id.music\u list);
停止音乐=(按钮)rootView.findviewbyd(R.id.stop);
音乐列表名称=新阵列列表();
音乐列表名称。添加(“deadmau5独自与你在一起。mp3”);
音乐列表名称。添加(“deadmau5 Bad Selection.mp3”);
音乐列表名称。添加(“Deadmau5 Clockwork.mp3”);
音乐列表名称添加(“Deadmau5 Faxing Berlin.mp3”);
音乐列表名称。添加(“Deadmau5-Ghosts-n-Stuff.mp3”);
音乐列表。SetonicClickListener(此);
stop_music.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向开始音乐=新意向(“com.olkun.medyasef.merhaba”);
//我在这里停止音乐。
启动音乐。putExtra(“音乐名称”、“停止”);
getActivity().sendBroadcast(启动音乐);
}
});
musicAdapter=新的musicAdapter(getActivity(),音乐列表名称);
music_list.setAdapter(musicAdapter);
返回rootView;
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串名称=音乐列表名称.get(位置);
日志d(“巴士拉”,名称);
//在这里,我开始任何音乐。
意向开始音乐=新意向(“com.olkun.medyasef.merhaba”);
启动music.putExtra(“music\u name”,name);
getActivity().sendBroadcast(启动音乐);
}
私有类MusicAdapter扩展BaseAdapter{
私有上下文;
私有列表音乐\u数组\u列表;
专用音乐播放器(上下文mContext、列表音乐\u数组\u列表){
this.mContext=mContext;
this.music\u array\u list=music\u array\u list;
}
@凌驾
public int getCount(){
返回音乐_数组_list.size();
}
@凌驾
公共字符串getItem(int位置){
返回音乐\u数组\u列表。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
字符串音乐列表=getItem(位置);
if(convertview==null){
convertview=LayoutFlater.from(mContext).充气(R.layout.music\u activity\u area,parent,false);
holder=新的ViewHolder();
holder.music\u name=(TextView)convertview.findViewById(R.id.music\u name);
convertview.setTag(支架);
}
否则{
holder=(ViewHolder)convertview.getTag();
}
holder.music\u name.setText(音乐列表);
返回视图;
}
}
/*私有视图持有者类*/
私有类视窗持有者{
TextView音乐名称;
}
}

当您在touch上播放音乐时,您会向广播发送额外的值。当您尝试停止或暂停时,您会发送另一个put EXTRACT,但值不同,并检查广播接收器是否存在停止值,然后停止您的音乐播放器。

这是因为每次按这些按钮(播放,停止)时,都会创建一个新的
BrodcastReceiver
实例(用于每个新的输入广播)。因此,一旦您开始在
MediaPlayer
的第一个实例中播放,您就无法在另一个实例中停止播放。
除此之外,在广播接收器内安装MediaPlayer(并使用它)是一个坏主意。

首先是thanx。如果广播接收者是个坏主意,那么我应该用什么?服务还是其他?是的,
服务
是这里的最佳选择。您仍然可以使用广播与您的服务进行通信(不过最好使用本地广播)。如果你不想,你不需要绑定到你的服务。再次。我试试看。