android 服务是否可以接收包,添加了intent

piah890a  于 2023-03-27  发布在  Android
关注(0)|答案(2)|浏览(93)

我想在添加新软件包时显示通知。我找到了清单文件所需的代码!我不知道如何在我的服务中捕获广播。我该如何做到这一点?

h22fl7wq

h22fl7wq1#

您可以注册一个PACKAGE_INSTALLPACKAGE_ADDED接收器来接收软件包安装和卸载事件,然后从广播接收器的onReceive启动Service( i.e IntentService),以在添加新软件包时显示通知。
在Manifest.xml中:

<receiver android:name=".PackageReceiver">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>

在PackageReceiver中:

public class PackageReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
       if (intent.getAction().equals(Intent.PACKAGE_INSTALL)) {
             //START YOUR SERVICE HERE
        } 
    }

}

或者您也可以在服务中动态注册接收器

br = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            //SHOW notification here or Start Notification Service
        }
    };
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
    intentFilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
    intentFilter.addDataScheme("package");
    registerReceiver(br, intentFilter);
oxf4rvwz

oxf4rvwz2#

虽然答案已经发布,并将工作到Android 29或Android 10,但从Android 11或Android 30起,我们只需要添加<queries>或需要在AndroidManifest.xml文件中添加以下权限-

<uses-permission
    android:name="android.permission.QUERY_ALL_PACKAGES" />

这是因为Android 11 -https://developer.android.com/training/package-visibility中的行为更改很少

相关问题