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

nex*_*006 3 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>
Run Code Online (Sandbox Code Playgroud)

和接收者:

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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我环顾四周,在这个帖子中:来电广播接收器不工作(Android 4.1)他们说,从Android 4.1开始,系统不再向没有活动的应用组件发送广播......这是真的吗?

Com*_*are 5

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

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

有关更多信息,请阅读Android 3.1发行说明.

  • @ nexus_2006:它有助于防止偷渡式恶意软件.曾几何时,你可以进入当时的Android市场的唯一方法就是在设备上,这意味着你可以安装软件(无论如何)的唯一方法就是拥有设备.一旦他们为市场添加了网站,现在有被黑客入侵的Google凭据的人将面临将应用程序安装在他们背后的风险.在用户注意到(例如,过夜)之前,此类恶意软件可以注册广播以自动获得控制并做出令人讨厌的事情.因此,现在可以选择加入任何应用程序代码. (2认同)