3

尝试在 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 开始,系统不再向没有活动的应用程序组件发送广播......这是真的吗?

4

1 回答 1

5

来电广播接收器不起作用(Android 4.1)他们说从 android 4.1 开始,系统不再向没有活动的应用程序组件发送广播……这是真的吗?

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

请阅读Android 3.1 发行说明了解更多信息。

于 2013-06-19T00:48:21.047 回答