使用Lookout应用(https://play.google.com/store/apps/details?id=com.lookout),我看到每次安装或升级应用时,它都会自动扫描此应用以确保它是不是恶意的。
关注Lookout,我编写了一个简单的应用程序,可以在安装或升级每个应用程序时收听广播消息。 AFAIK,广播消息有一些类型的IntentFilter,它是:
我希望Intent.ACTION_PACKAGE_ADDED
是答案但错误(ACTION_PACKAGE_ADDED:设备上已安装新的应用程序包。数据包含程序包的名称。请注意,新安装的程序包不接收此广播。)不推荐使用ACTION_PACKAGE_INSTALL
。
谁能告诉我一个更好的方法?欢迎任何帮助。
答案 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