尝试在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开始,系统不再向没有活动的应用程序组件发送广播......这是真的吗?
答案 0 :(得分:5)
来电广播接收器无法正常工作(Android 4.1)他们说,从Android 4.1开始,系统不再向没有活动的应用组件发送广播......这是真的吗?
自Android 3.1以来就是如此。在清单注册的BroadcastReceivers
工作之前,必须明确地运行您的某个组件,并且典型的解决方案是拥有一个活动(提供应用程序配置,帮助,许可协议等的活动)用户启动。
请阅读the Android 3.1 release notes了解更多信息。