int*_*_32 9 android broadcastreceiver android-4.0-ice-cream-sandwich
我有一个在Manifest注册的广播接收器:
<application ...>
<receiver android:name="com.some.pkg.NewAppReceiver" >
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
</intent-filter>
</receiver>
</appcication>
Run Code Online (Sandbox Code Playgroud)
和接收器:
public class NewAppReceiver extends BroadcastReceiver {
private static final String TAG = "NewAppReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Intent: " + intent.getAction());
}
}
Run Code Online (Sandbox Code Playgroud)
当我手动或从Android Market安装APK时,没有收到任何内容.为什么?
and*_*per 28
在安装其他应用程序之前,您是否运行了包含此broadcastReceiver的应用程序?
从某个API版本开始,在您执行应用程序之前,broadcastReceivers将无法运行.放置一个活动并执行它.
另外,不要忘记将以下内容添加到broadcastReceiver中:
<data android:scheme="package" />
Run Code Online (Sandbox Code Playgroud)
编辑:在Android 8及更高版本中,如果您的应用程序针对的是API 27或更高版本,它将部分工作,因此您必须在代码中而不是在清单中注册这些事件.以下是清单中仍可安全使用的意图列表:https://developer.android.com/guide/components/broadcast-exceptions.html.
其余的应该用在代码中.更多信息在这里
小智 9
从 API 26(android 8) 中无法从清单注册接收器。因为它对旧版本有性能影响。
但是我们可以从 java 代码注册接收器并接收已删除和添加的应用程序的更新。
val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED)
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED)
intentFilter.addDataScheme("package")
registerReceiver(YourBroadcastReceiver(), intentFilter)
Run Code Online (Sandbox Code Playgroud)
由于android.intent.action.PACKAGE_ADDED是系统意图(请注意,您自己的应用程序在安装时不会收到它),您的BroadcastReceiver将从您应用程序外部的来源接收消息.因此,检查你没有把:android:exported ="false"
您还可能需要添加:
<data android:scheme="package" />
Run Code Online (Sandbox Code Playgroud)
所以,你的广播接收器在你的AndroidManifest.xml中应该是这样的:
<application ...>
<receiver android:name=".NewAppReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
</appcication>
Run Code Online (Sandbox Code Playgroud)
如果它仍然不起作用,您可以尝试放置更高的优先级,例如:android:priority ="1000"
请查看:http://developer.android.com/guide/topics/manifest/receiver-element.html
您是否尝试在正在安装的应用程序中接收意图?ACTION_PACKAGE_ADDED的文档说:
请注意,新安装的软件包不会收到此广播.
另一种可能性是,这种意图可能不会被传递给通过清单注册的组件,而只能手动传递(如Mark Murphy对Stack Overflow问题的答案所述,无法接收PACKAGE意图的广播).
| 归档时间: |
|
| 查看次数: |
14770 次 |
| 最近记录: |