Android: прослушать приложение, установленное/обновленное широковещательное сообщение

Используя приложение Lookout (https://play.google.com/store/apps/details?id=com.lookout), я вижу, что каждый раз, когда я устанавливаю или обновляю приложение, он автоматически сканирует это приложение, чтобы гарантировать его не злонамеренный.

Follow 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 устарел.

Может ли кто-нибудь сказать мне лучший способ? Любая помощь приветствуется.

Ответ 1

Если вы устанавливаете приложение A, все остальные приложения на устройстве получат намерение, что приложение 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 - это имя пакета приложения, которое вы хотите узнать о времени установки. Если вы хотите использовать его для своего приложения, укажите имя своего приложения.

Ответ 2

Вы можете попробовать этот ресивер и разрешение. (Но это, похоже, работает только в /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" />

Ответ 3

Вам нужно иметь два приложения, один из которых контролирует установку и обновление других приложений.

Ответ 4

Android не отправит вашу трансляцию, которую вы устанавливаете, но Google Play будет. Это не поможет, если ваше приложение загружается через Amazon или через отладчик, но это позволяет вам запускать код, если ваше приложение установлено через Google Play: https://developers.google.com/android/reference/com/google/android/gms/tagmanager/InstallReferrerReceiver