【发布时间】:2018-03-19 12:09:57
【问题描述】:
我必须接收系统发送的隐式广播 (ACTION_PACKAGE_ADDED) 来检测应用程序的安装并执行一些代码。我使用了下面的代码:
public class Receiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// It will trigger when any app is installed
Uri data = intent.getData();
String packageAdv = data.getEncodedSchemeSpecificPart();
//some code...
}
}
在我的Manifest 文件中,我声明了我的接收者:
<receiver android:name="com.myapp.Receiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package"/>
</intent-filter>
</receiver>
它在 8.0 Oreo 版本之前完美运行。现在,我必须使用registerReceiver 明确我的接收者。我怎样才能做到这一点?示例代码将不胜感激。
【问题讨论】:
-
Oreo 8.0 版已弃用此功能。
-
看看this
-
第 1 步:创建前景
Service。步骤#2:在该服务的onCreate()中,调用registerReceiver(),传入BroadcastReceiver的一个实例。步骤#3:安排在适当的时候启动该服务。但是,除非您可以证明用户始终保持服务运行是合理的,否则使用我在 the answer that Hemant linked to 的评论中提到的轮询方法是一种更可持续的解决方案。 -
@CommonsWare,如果我要在我的应用程序运行时使用这个接收器,我如何以编程方式注册
ACTION_PACKAGE_ADDED?无需经常收听此事件。 -
致电
registerReceiver()联系Context。我不知道“当我的应用程序运行时”究竟是什么意思。如果您的意思是“当我的进程碰巧因其他原因运行时”,您可以创建一个自定义的Application子类,让它在其onCreate()中调用registerReceiver(),并通过android:name注册Application在清单中的<application>元素上。
标签: java android broadcastreceiver