Android <receiver> - BroadcastReceiver未被调用

5
我在清单文件中指定了一个接收器,如下所示...
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.me.MyProject"
          android:versionCode="1"
          android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.RECEIVE_SMS"/>

<application android:label="@string/app_name"
             android:icon="@drawable/ic_launcher" android:enabled="true">

    <service android:name="MyService" 
             android:exported="true"
             android:process=":different" 
             android:enabled="true">
        <intent-filter>
            <action android:name="com.me.MyService">
            </action>
        </intent-filter>
    </service>

    <receiver android:exported="true" 
              android:name="MySMSBroadcastReceiver" 
              android:enabled="true">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>
</application>

如果我在Android Froyo设备(模拟器或真实设备)上测试这个,它会按照我的预期工作。当设备接收到短信时,MySMSBroadcastReceiver.onReceive(...)会被调用。

然而,如果我在4.0或4.1设备(无论是模拟器还是真实设备)上安装它,接收信息时什么也不会发生。没有错误,没有任何提示。我还将项目的属性更改为具体针对4.0或4.1设备,并重新安装了它,但没有任何变化。

2个回答

5
在应用程序安装后,用户需要手动启动您的某个活动,然后您的任何BroadcastReceiver才会生效,这适用于Android 3.1及以上版本。

谢谢你的回答。这个问题没有其他解决办法吗?我的应用程序没有活动,而且在清单中列出的服务也没有运行。 - Lieuwe
1
@Lieuwe 我不确定,但我认为没有办法做到这一点。这完全与Android安全有关,没有人能够突破它。 - Piyush Agarwal

0

您可以在操作系统启动时赋予正确的权限来启动接收器。


除非用户至少启动了该活动(目前不存在),否则这也行不通。 - Lieuwe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接