无法在 android 中停止 Media Player
Can't stop Media Player in android
我尝试了几乎所有在互联网上找到的东西,但媒体播放器一旦启动就无法停止。我正在使用广播接收器并使用 SMS 控制媒体播放器。这是我的代码。
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);
}
}
}
}
}
}
}
当我发送 "ON" 时媒体播放器正在打开,但它不会关闭。是的,我已经在 Manifest 文件中提供了所需的权限。
BroadcastReciever
它会存活大约 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);
它帮助我停止了媒体播放器。
我尝试了几乎所有在互联网上找到的东西,但媒体播放器一旦启动就无法停止。我正在使用广播接收器并使用 SMS 控制媒体播放器。这是我的代码。
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);
}
}
}
}
}
}
}
当我发送 "ON" 时媒体播放器正在打开,但它不会关闭。是的,我已经在 Manifest 文件中提供了所需的权限。
BroadcastReciever
它会存活大约 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);
它帮助我停止了媒体播放器。