通过清单注册时广播接收器不工作

时间:2013-06-19 00:46:14

标签: android android-intent telephonymanager

尝试在Android应用的清单中设置简单的广播接收器,以检测手机何时响铃并启动服务。它在呼叫进入时没有收到广播,没有日志输出,nada。我尝试了android.intent.action.PHONE_STATE操作以及清单中的TelephonyManager.ACTION_PHONE_STATE_CHANGED,对我来说都没有做任何事情。

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <receiver
        android:name="com.berrmal.calllog.CallReceiver"
        android:enabled="true" >
        <intent-filter>
            <action android:name="android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

和接收者:

public class CallReceiver extends BroadcastReceiver {

public void onReceive(Context c, Intent i) {
    Log.d("callreceiver", "onReceive()");
    String state = i.getStringExtra(TelephonyManager.EXTRA_STATE);
    Log.d("callreceiver", state);
    if (state.equals(TelephonyManager.CALL_STATE_RINGING)) {
        Intent serviceStartIntent = new Intent(c, RecordService.class);
        serviceStartIntent.putExtra("number", i.getStringExtra("EXTRA_INCOMING_NUMBER"));
        c.startService(serviceStartIntent);
    }
}
}

我环顾四周,在这个帖子中:Incoming call broadcast receiver not working (Android 4.1)他们说从android 4.1开始,系统不再向没有活动的应用程序组件发送广播......这是真的吗?

1 个答案:

答案 0 :(得分:5)

  

来电广播接收器无法正常工作(Android 4.1)他们说,从Android 4.1开始,系统不再向没有活动的应用组件发送广播......这是真的吗?

自Android 3.1以来就是如此。在清单注册的BroadcastReceivers工作之前,必须明确地运行您的某个组件,并且典型的解决方案是拥有一个活动(提供应用程序配置,帮助,许可协议等的活动)用户启动。

请阅读the Android 3.1 release notes了解更多信息。