在Android中收听app安装/升级的广播消息

ant*_*afe 10 android install broadcast broadcastreceiver

使用Lookout应用程序(https://play.google.com/store/apps/details?id=com.lookout),我看到每次安装或升级应用程序时,它都会自动扫描此应用程序以确保它不是恶意的.

关注Lookout,我编写了一个简单的应用程序,可以在安装或升级每个应用程序时收听广播消息.AFAIK,有一些类型的IntentFilter用于广播消息,它是:

  • Intent.ACTION_PACKAGE_ADDED
  • Intent.ACTION_PACKAGE_CHANGED
  • Intent.ACTION_PACKAGE_INSTALL

我希望Intent.ACTION_PACKAGE_ADDED是答案,但它是错误的(ACTION_PACKAGE_ADDED:设备上已安装新的应用程序包.数据包含程序包的名称.请注意,新安装的程序包不接收此广播.)ACTION_PACKAGE_INSTALL不推荐使用.

谁能告诉我一个更好的方法?欢迎任何帮助.

Akh*_*hil 13

如果您正在安装应用程序A,则设备上的所有其他应用程序将获得该Intent应用程序A是新安装的应用程序但不是A本身,因为它似乎没有任何用处.如果以后安装或更改其他应用程序,现在A将获得广播.

如果您想了解安装应用程序的时间或其他应用程序的上次安装或更新时间,您可以随时使用PackageManager:

PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0);
String appFile = appInfo.sourceDir; 
long installed = new File(appFile).lastModified();
Run Code Online (Sandbox Code Playgroud)

app.package.name是您要查找安装时间的应用程序的包名称.如果您想将它用于您的应用,请传入您应用的包名称.

  • 根据我在Lookout中看到的内容,他们还具有FileSystemMonitorService来跟踪新安装的应用程序。也许与您的答案相似。实际上,我认为在Android中,没有广播消息可以跟踪新安装的应用程序。但是使用您的方式,这是可能的。 (2认同)

小智 7

你可以尝试这个接收器和许可.(但这似乎只适用于/ system/app)^^"

<receiver
    android:name="com.your.receiver"
    android:enabled="true"
    android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_ADDED" />
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                    <data android:scheme="package"/> 
                </intent-filter>
 </receiver>
 <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED" />
Run Code Online (Sandbox Code Playgroud)