为什么在清单中注册来电BroadCastReceiver不起作用?

时间:2017-04-14 05:45:59

标签: android broadcastreceiver

我在清单中注册了BroadCastReceiver,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.droid.arghaman.test_app">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity
    android:name="com.droid.arghaman.test_app.MainActivity"
    android:label="@string/title_activity_main"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<receiver
    android:name="MyBroadcastReceiver"
    android:enabled="true"
    android:exported="false"
    android:label="StartServiceAtBootReceiver">
    <intent-filter>
        <!--action android:name="android.intent.action.BOOT_COMPLETED"></action-->
        <action android:name="android.intent.action.PHONE_STATE"></action>
    </intent-filter>
</receiver>
</application>
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<service android:name="LocationNotifierService"></service>

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>

</manifest>

但是当我的手机响铃时,我的BroadCastReceiver从未启动过。这是我的BroadCastReceiver代码:

public class MyBroadcastReceiver extends MyBroadcastReceiver {
Context ctx;
@Override
public void onReceive(Context context, Intent intent) {
    ctx = context;
    try {
        // TELEPHONY MANAGER class object to register one listner
        TelephonyManager tmgr = (TelephonyManager) context
               .getSystemService(Context.TELEPHONY_SERVICE);

        //Create Listner
        MyPhoneStateListener PhoneListener = new MyPhoneStateListener();

        // Register listener for LISTEN_CALL_STATE
        tmgr.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);

    } catch (Exception e) {
        Log.e("Phone Receive Error", " " + e);
    }

}

private class MyPhoneStateListener extends PhoneStateListener {

    public void onCallStateChanged(int state, String incomingNumber) {

        Log.d("MyPhoneListener",state+"   incoming no:"+incomingNumber);

        if (state == 1) {

            String msg = "New Phone Call Event. Incomming Number : "+incomingNumber;
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(ctx, msg, duration);
            toast.show();

        }
    }
}
}

但是当我在第一个活动中通过此代码片段注册我的BroadCastReceiver时,它可以完美地运行:

 IntentFilter filter= new IntentFilter();
 filter.addAction(TelephonyManager.EXTRA_STATE_RINGING);
 filter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
 MyBroadcastReceiver receiver = new MyBroadcastReceiver ();
 this.registerReceiver(receiver, filter);

Android中是否有任何版本冲突或弃用,或者这是我的错误?

0 个答案:

没有答案