0

我有一个 Radio 应用程序,它使用媒体播放器服务和 BroadcastReceiver 来检查传入和传出呼叫以停止或重新启动媒体播放器服务,它可以工作,但是当我退出我的应用程序时,BroadcastReceiver 仍在检查呼叫,它使我的崩溃应用程序即使消失了(已经完成)这里是代码

显现

<service android:name=".PlayerService" 
            android:label="@string/app_name"> 
            <intent-filter>
        </intent-filter>    
    </service>
    <receiver android:name=".IncomingCallInterceptor">                     
        <intent-filter>                                                   
             <action android:name="android.intent.action.PHONE_STATE"/> 
             <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
        </intent-filter>
    </receiver>

广播接收器

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;

public class IncomingCallInterceptor extends BroadcastReceiver {                                  

@Override
public void onReceive(Context context, Intent intent) {                                         
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);  


    if (PlayerService.getInstance() != null) {
    if (TelephonyManager.EXTRA_STATE_RINGING.equals(state)) {  
            PlayerService.getInstance().stopMusic();
    }
    if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) { 
            PlayerService.getInstance().stopMusic();
    }
    if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {  
            PlayerService.getInstance().startMusic();
    }

    }else{}

}

}

我怎样才能让它停止?

4

3 回答 3

4

从您的清单中删除接收器并在您的服务中本地注册它:

在您的服务方法中使用此代码onCreate()

IncomingCallInterceptor interceptor;

public void onCreate() {
    super.onCreate();

    //your code here

    incerceptor = new IncomingCallInterceptor();
    IntentFilter f = new IntentFilter();
    f.addAction("android.intent.action.PHONE_STATE");
    f.addAction("android.intent.action.NEW_OUTGOING_CALL");
    registerReceiver(interceptor, f);
}

不要忘记在您的服务onDestroy方法中取消注册接收器:

public void onDestroy() {
    unregisterReceiver(interceptor);
}
于 2012-04-06T00:09:17.933 回答
0

您已经在清单中定义了广播接收器,这就是为什么即使您还没有启动应用程序(或运行服务),您的应用程序仍然可以收听这些广播。要解决此问题,请在您的服务中以编程方式注册您的广播接收器,以便它仅在播放器运行时有效,而不是一直有效。

或者在您当前的接收器中,在调用开始/停止音乐方法之前,您应该检查服务是否已经在运行。

于 2012-04-05T23:12:59.227 回答
0

如果您提供崩溃日志,它将有更多帮助。通过查看您的代码,一切都很好,但是当您检查 PlayerService.getInstance() not null 时,它将始终为您提供实例,只需在您要播放或停止或暂停时也应用一个 mediaplayer 对象而不是 null 检查。

希望它会帮助你。

于 2014-01-31T12:08:36.373 回答