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

Android 通过清单注册时广播接收器不工作,android,android-intent,telephonymanager,Android,Android Intent,Telephonymanager,尝试在Android应用程序的清单中设置一个简单的广播接收器,以检测手机何时响起并启动服务。它没有收到广播时,呼叫进来,没有日志输出,娜达。我尝试了android.intent.action.PHONE_STATE操作,也尝试了清单中的TelephonyManager.action_PHONE_STATE_更改,但都没有为我做任何更改 <application android:allowBackup="true" android:icon="@drawable/ic_lau

尝试在Android应用程序的清单中设置一个简单的广播接收器,以检测手机何时响起并启动服务。它没有收到广播时,呼叫进来,没有日志输出,娜达。我尝试了android.intent.action.PHONE_STATE操作,也尝试了清单中的TelephonyManager.action_PHONE_STATE_更改,但都没有为我做任何更改

<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>
我环顾四周,在这个帖子里:他们说,从android 4.1开始,系统不再在没有活动的情况下向应用程序组件发送广播……这是真的吗

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

自从安卓3.1以来,情况就是如此。在manifest registered
BroadcastReceivers
工作之前,必须明确运行一个组件,典型的解决方案是让用户启动一个活动(提供应用程序配置、帮助、许可协议等的活动)


更多信息请阅读。

感谢您的快速回复。这看起来很疯狂,几乎与在清单中声明意图过滤器的初衷相反。@nexus_2006:它是为了帮助防止恶意软件驱动。曾几何时,你进入当时Android市场的唯一途径是在设备上,这意味着你可以安装软件的唯一途径(无论采用何种方式)就是把设备拿在手里。一旦他们为市场添加了该网站,现在拥有被黑客攻击的谷歌凭证的人将面临着在背后安装应用程序的风险。这类恶意软件可以在用户注意到之前(例如,一夜之间),注册无数次广播,以自动获得控制权并做一些令人讨厌的事情。因此,运行任何应用程序代码现在都是opt-in。哇,谢谢你提供的信息!我不明白这里哪里错了。
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);
    }
}
}