如何跟踪APK安装

时间:2013-03-03 19:55:39

标签: android install apk tracking

我正在尝试跟踪APK安装。当用户登陆下载页面(而非商店)时,他来自特定来源。当用户点击下载时,将安装APK。安装完成后,我需要将安装映射到用户来自的源,然后再进行安装。有没有好办法呢?

我的计划到目前为止:将下载页面上的用户IP和屏幕分辨率保存到数据库。安装后,将IP和屏幕分辨率传递给服务器,并使用数据库中的行进行映射。这是一个很好的方法吗?

希望你们能帮帮我。

2 个答案:

答案 0 :(得分:1)

你只需要为此编写一个BroadcastReceiver,它可以接收PACKAGE_ADDEDPACKAGE_INSTALL意图:

<强> InstallBroadcastReceiver.Class

public class InstallBroadcastReceiver extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();
  if(action.equals(Intent.ACTION_PACKAGE_ADDED)
    ||action.equals(Intent.ACTION_PACKAGE_INSTALL)){
    notifyServerForApplicationInstall(context, intent);

    }
   }

  private void notifyServerForApplicationInstall(Context context,Intent intent){

    //send the data to your server here
  }
}

AndroidManifest

中注册接收器
    <receiver
        android:name=".InstallBroadcastReceiver"
        android:exported="false" 
        <intent-filter>
        <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

不要忘记在清单中提供此权限:

<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>

答案 1 :(得分:0)

我准备了一个BroadcastReceiver类:

public class newPackageReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("DEBUG"," test for application install/uninstall");
    }

}

在主要活动中,我首先注册一个新的接收器对象,然后安装应用程序安装按钮。

public void onCreate(Bundle savedInstanceState) {
...
IntentFilter filter = new IntentFilter();
        filter.addAction(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
        filter.addAction(Intent.ACTION_PACKAGE_INSTALL);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);

        receiver = new newPackageReceiver();
        registerReceiver(receiver, filter);
        ...

dlButton.setText(R.string.dl_button);
dlButton.setOnClickListener(new AppliDownloadOnClickListener(this ));   


@Override
public void onDestroy(){
     unregisterReceiver(receiver);
     super.onDestroy();
}