Listen for app installed / upgraded broadcast message in Android

14,672

Solution 1

If you are installing an application A, all other applications on the device will get the Intent that application A is the newly installed application but not A itself as it doesn't seem of any use. Now A will get broadcasts if other apps are later installed or changed.

If you want to find out at when your app was installed or some other app's the last install or update time, you can always use PackageManager:

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

here app.package.name is the package name of the app you want to find out the install time. If you want to use it for your app, pass in your app's package name.

Solution 2

You can try this receiver and permission. (But this seem only work in /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" />

Solution 3

Android won't send your a broadcast that you're being installed, but Google Play will. This won't help if your app is loaded through Amazon or through the debugger, but it does allow you to run code if your app is installed through Google Play: https://developers.google.com/android/reference/com/google/android/gms/tagmanager/InstallReferrerReceiver

Share:
14,672
anticafe
Author by

anticafe

I'm a Android developer.

Updated on June 05, 2022

Comments

  • anticafe
    anticafe almost 2 years

    Using Lookout app (https://play.google.com/store/apps/details?id=com.lookout), I see every time I install or upgrade app, it'll automatically scan this app to ensure it's not malicious.

    Follow Lookout, I write a simple app which listen broadcast message whenever each app is installed or upgraded. AFAIK, there are some type of IntentFilter for broadcast message, it is:

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

    I hope Intent.ACTION_PACKAGE_ADDED is the answer but it's wrong (ACTION_PACKAGE_ADDED: A new application package has been installed on the device. The data contains the name of the package. Note that the newly installed package does not receive this broadcast.) while ACTION_PACKAGE_INSTALL is deprecated.

    Can anyone tell me a better way? Any help is welcome.

  • Akhil
    Akhil about 12 years
    post if you have any specific queries or something about what do you want to achieve.
  • anticafe
    anticafe about 12 years
    From what I see in Lookout, they also have a FileSystemMonitorService to keep track of new installed apps. Maybe it's similar what's in your answer. In fact I think in Android, there is no broadcast message to keep track of new installed app. But using your way, it's possible.
  • Mahdi-Malv
    Mahdi-Malv about 4 years
    Sending this intent is explicitly for System. But receiving it isn't.
  • omzer
    omzer over 3 years
    The permission BROADCAST_PACKAGE_REMOVED only granted for System Apps.