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

时间:2012-04-24 11:42:15

标签: android install broadcastreceiver broadcast

使用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

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

4 个答案:

答案 0 :(得分: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();

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

答案 1 :(得分:8)

您可以尝试此接收器和权限。 (但这似乎只适用于/ 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" />

答案 2 :(得分:0)

您需要有两个应用程序,其中一个监视其他应用程序的安装和升级。

答案 3 :(得分:0)

Android不会发送您正在安装的广播,但Google Play会。如果您的应用是通过亚马逊或调试器加载的,那么这会有所帮助,但如果您的应用是通过Google Play安装的话,它确实允许您运行代码:https://developers.google.com/android/reference/com/google/android/gms/tagmanager/InstallReferrerReceiver