android - 如何以编程方式使用 BroadCastReceiver

标签 android broadcastreceiver

如何以编程方式注册监听“PACKAGE_ADDED”操作的 BroadcastReceiver?安装软件包后,我正在尝试做一些事情。我可以通过在 AndroidManifest.xml 中注册接收器来使其工作,但我需要通过以编程方式注册它来使其以另一种方式工作,以便它仅在通过我的应用程序安装的 .apks 上被调用。我已经尝试了几种不同的方式,下面的代码来自这个答案 https://stackoverflow.com/a/4805733/1024722但它不起作用。有什么想法吗?

private BroadcastReceiver receiver;

protected void onCreate(Bundle savedInstanceState)
{
        super.onCreate(savedInstanceState);
        ButterKnife.inject(this);


        intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);

        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.v("test", "received");
            }
        };

        registerReceiver(receiver, intentFilter);   

}

编辑:在我的应用程序 Activity 中,我单击一个按钮从服务器下载该应用程序,然后在我的通知栏中单击已下载的应用程序进行安装。然后它会显示此屏幕:​​

enter image description here

我单击“安装”,它会安装但不会调用我的 onReceive 方法(除非我在 xml 中注册它)。然后它显示这个屏幕:

enter image description here

然后我单击“完成”,它会返回到我的“安装”按钮的 Activity 。我想知道它是否不起作用,因为它启动了屏幕截图中显示的 Activity ,因此无法在我的接收器中调用 onReceive 方法,因为我的 Activity 的 onPause 方法已被调用并且在我单击完成之前不再“Activity ” ,这是在调用“PACKAGE_ADDED”操作之后。

最佳答案

您需要添加 http://developer.android.com/reference/android/content/IntentFilter.html#addDataScheme(java.lang.String) :

|intent filter object|.addDataScheme("package");

PackageManager 只会将其发送给具有该 Intent 操作并且数据方案为“包”的接收者。

关于android - 如何以编程方式使用 BroadCastReceiver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26454339/

相关文章:

android - 为什么 getCallingActivity 总是返回 null?

Android - 网络状态广播接收器不接收 Intent

java - 当我的在线状态发生变化时,Android 广播接收器崩溃

broadcastreceiver - Google Analytics for Android v4 - 在 BroadcastReceiver 上发送事件

android - 通过 gradle 为 Android 中的不同构建类型更改 java 文件的内容

android - 移动应用程序上的 HTTPS 证书续订

java - 在带有彩色背景的 Canvas 上绘制位图(来自可绘制对象)

android - LiveDataReactiveStreams : converting Flowable to LiveData doesn't work

java - 如何获取来电号码?

java - 应用程序启动后崩溃