11

使用 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:设备上已安装一个新的应用程序包。数据包含包的名称。请注意,新安装的包不会收到此广播。)whileACTION_PACKAGE_INSTALL已弃用。

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

4

4 回答 4

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是您要查找安装时间的应用程序的包名称。如果您想将它用于您的应用程序,请传入您的应用程序的包名称。

于 2012-05-03T09:51:37.777 回答
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" />
于 2014-02-20T04:59:12.367 回答
1

Android 不会向您发送正在安装的广播,但 Google Play 会。如果您的应用程序是通过 Amazon 或通过调试器加载的,这将无济于事,但如果您的应用程序是通过 Google Play 安装的,它确实允许您运行代码:https ://developers.google.com/android/reference/com/谷歌/android/gms/tagmanager/InstallReferrerReceiver

于 2015-11-10T20:39:38.970 回答
0

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

于 2012-05-01T07:42:44.670 回答