3

我正在尝试跟踪 APK 安装。当用户登陆下载页面(而不是商店)时,他来自特定来源。当用户点击下载时,APK 将被安装。安装后,我需要将安装映射到用户在安装之前来自的源。有什么好的方法可以做到这一点吗?

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

希望你们能帮助我。

4

2 回答 2

1

您只需要为此编写一个可以接收PACKAGE_ADDEDPACKAGE_INSTALLIntent 的 BroadcastReceiver:

安装BroadcastReceiver.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>

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

<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
于 2013-03-03T20:28:10.017 回答
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();
}
于 2015-02-11T13:52:04.157 回答