Can';不要停止android中的媒体播放器
我尝试了互联网上找到的几乎所有东西,一旦媒体播放器启动,我就无法停止。我使用广播接收器,我使用短信控制媒体播放器。这是我的密码Can';不要停止android中的媒体播放器,android,media-player,Android,Media Player,我尝试了互联网上找到的几乎所有东西,一旦媒体播放器启动,我就无法停止。我使用广播接收器,我使用短信控制媒体播放器。这是我的密码 public class Receiver extends BroadcastReceiver{ String body; String address; public static final String SMS_EXTRA_NAME="pdus"; MediaPlayer mp = new MediaPlayer(); @
public class Receiver extends BroadcastReceiver{
String body;
String address;
public static final String SMS_EXTRA_NAME="pdus";
MediaPlayer mp = new MediaPlayer();
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
SharedPreferences obj1=context.getSharedPreferences("mypref", Context.MODE_PRIVATE);
String newstring=obj1.getString("key1", null);
String name=newstring;
Bundle bund=intent.getExtras();
String space="";
if(bund!=null)
{
Object[] smsExtra=(Object[])bund.get(SMS_EXTRA_NAME);
for(int i=0;i<smsExtra.length;i++)
{
SmsMessage sms=SmsMessage.createFromPdu((byte[])smsExtra[i]);
body=sms.getMessageBody().toString();
address=sms.getOriginatingAddress();
if(body.equals("ON"))
{
if(mp.isPlaying())
{
mp.stop();
}
try {
mp.reset();
AssetFileDescriptor afd;
afd = context.getAssets().openFd("file.mp3");
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepare();
mp.start();
mp.setLooping(true);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else if(body.equals("OFF"))
{
if (mp.isPlaying()==true||mp!=null)
{
try{
mp.stop();
mp.release();
} catch(Exception e){
System.out.println("Exception"+e);
}
}
}
}
}
}
}
公共类接收器扩展了BroadcastReceiver{
弦体;
字符串地址;
公共静态最终字符串SMS_EXTRA_NAME=“pdus”;
MediaPlayer mp=新的MediaPlayer();
@凌驾
公共void onReceive(上下文、意图){
//TODO自动生成的方法存根
SharedReferences obj1=context.getSharedReferences(“mypref”,context.MODE\u PRIVATE);
字符串newstring=obj1.getString(“key1”,null);
字符串名称=新闻字符串;
Bundle bund=intent.getExtras();
字符串空格=”;
如果(bund!=null)
{
Object[]smsExtra=(Object[])bund.get(SMS\u EXTRA\u NAME);
对于(int i=0;iBroadcastReceiver
它保持活动状态约9秒,您应该不要在其中创建大操作。但是,您可以让它启动一个操作,如启动活动或服务,然后在那里播放曲目或开始下载文件…等等
如果您只想启动一个播放器而不需要用户交互,我建议您启动一个服务,然后在那里播放您想要的内容。我花了很多时间研究这个问题,并发现: 这里的问题是,我在IntentService管理的线程中创建了一个MediaPlayer,在开始播放时,该线程不再有效 因此,出路是:
final Handler handler = new Handler(getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
mediaPlayer.start();
}
});
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
}
, 30 * 1000);
它帮助我停止了mediaplayer。停止播放机时有任何错误/异常吗?没有。没有错误。没有应用程序崩溃。除了媒体播放机没有停止之外,一切都很好。您是否调试并检查了mp.stop();是否真的被调用?没有。但我使用了该服务,它工作正常。无论如何,谢谢您的时间。:)是的,我知道了。我用接收器调用服务