Android:安装另一个应用程序并检测它何时第一次启动

时间:2017-05-27 11:09:04

标签: android installer android-package-managers activity-manager android-activitymanager

我有一个安装其他应用程序的应用程序,就像Google Play商店一样。为了完成分析链,我需要能够检测安装的应用程序何时首次启动。

Google Play商店肯定以某种方式实现了它。

1 个答案:

答案 0 :(得分:2)

Android系统为您做到了这一点。当第一次启动安装的应用程序时,程序包管理器会向安装程序广播Intent.ACTION_PACKAGE_FIRST_LAUNCH。为了确保您收到它,您需要:

  • 安装应用程序后立即设置安装程序包名称,因为广播仅限于为正在启动的应用程序设置的安装程序包名称。

    getPackageManager().setInstallerPackageName("com.example", getApplicationContext().getPackageName());
    
  • 确保您没有使用PackageManager.INSTALL_REPLACE_EXISTING,因为它将被视为更新,系统不会为其发送广播

  • 在运行时注册接收者以获取操作Intent.ACTION_PACKAGE_FIRST_LAUNCH,而不是在清单中。

注册广播接收器:

registerReceiver(new LaunchReceiver(), new IntentFilter(Intent.ACTION_PACKAGE_FIRST_LAUNCH));

示例广播接收器:

public class LaunchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getData() != null) {
            Log.d(TAG, "Package name: " + intent.getDataString().replace("package:", ""));
        }
    }
}

有关详细信息,请在此处阅读实际代码:PackageManagerService.notifyFirstLaunch()