我正在尝试跟踪APK安装。当用户登陆下载页面(而非商店)时,他来自特定来源。当用户点击下载时,将安装APK。安装完成后,我需要将安装映射到用户来自的源,然后再进行安装。有没有好办法呢?
我的计划到目前为止:将下载页面上的用户IP和屏幕分辨率保存到数据库。安装后,将IP和屏幕分辨率传递给服务器,并使用数据库中的行进行映射。这是一个很好的方法吗?
希望你们能帮帮我。
答案 0 :(得分:1)
你只需要为此编写一个BroadcastReceiver,它可以接收PACKAGE_ADDED
和PACKAGE_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();
}