Java 不停止BroadcastReceiver中的当前歌曲
我正在尝试一个音乐应用程序。 我使用MediaPlayer对象和 我的音乐在广播电台播放。 当我触摸列表中的任何歌曲时,音乐正在播放。 但我的停止、重置或暂停功能不起作用 MediaPlayerBroadcast.javaJava 不停止BroadcastReceiver中的当前歌曲,java,android,Java,Android,我正在尝试一个音乐应用程序。 我使用MediaPlayer对象和 我的音乐在广播电台播放。 当我触摸列表中的任何歌曲时,音乐正在播放。 但我的停止、重置或暂停功能不起作用 MediaPlayerBroadcast.java public class MediaPlayerBroadcast extends BroadcastReceiver { private MediaPlayer mPlayer = new MediaPlayer(); @Override pub
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。如果广播接收者是个坏主意,那么我应该用什么?服务还是其他?是的,
服务
是这里的最佳选择。您仍然可以使用广播与您的服务进行通信(不过最好使用本地广播)。如果你不想,你不需要绑定到你的服务。再次。我试试看。