gpt4 book ai didi

android - 如何检测用户取消程序 (".apk") 安装的情况?

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:52 25 4
gpt4 key购买 nike

如何检测用户取消安装应用程序(.apk文件)的情况?

我的应用程序以编程方式安装其他应用程序,但用户可以取消安装过程。在安装过程中,用户会看到类似这样的对话框:“替换应用程序。您正在安装的应用程序将替换另一个应用程序”。然后是一个对话框“你想安装这个应用程序吗?”。如果用户按下“安装”,将生成 ACTION_PACKAGE_... 广播。但是如何检测用户是否按下了“取消”?

最佳答案

public class ApplicationInstaller extends Activity {

private final static int createState = 1, installState = 2;
private int activityState = 0, counter = 0;
private ApplicationInstallerReceiver aIR;
private String appName, appPath;
private boolean result;

//---------------------------------------------------------------------------------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_installer);
if (activityState == 0) {
this.activityState = ApplicationInstaller.createState;
this.appName = this.getIntent().getStringExtra("AppName");
this.appPath = this.getIntent().getStringExtra("AppPath");
if (this.appName == null || this.appPath == null) {
finish();
}
}
}

//---------------------------------------------------------------------------------------------
@Override
public void onStart() {
super.onStart();
if (this.activityState == ApplicationInstaller.createState) {
activityState = ApplicationInstaller.installState;
aIR = new ApplicationInstallerReceiver();
IntentFilter ifilter = new IntentFilter();
ifilter.addAction(Intent.ACTION_PACKAGE_ADDED);
ifilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
ifilter.addAction(Intent.ACTION_PACKAGE_INSTALL);
ifilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
ifilter.addDataScheme("package");
registerReceiver(aIR, ifilter);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(appPath)), "application/vnd.android.package-archive");
try {
startActivity(intent);
} catch (Exception e) {
result = false;
finish();
}
} else {
finish();
}
}

//---------------------------------------------------------------------------------------------
@Override
protected void onResume() {
super.onResume();
counter++;
if (counter == 2) {
finish();
}
}

//---------------------------------------------------------------------------------------------
@Override
protected void onDestroy() {
super.onDestroy();
if (aIR != null) {
this.unregisterReceiver(aIR);
}
if (activityState == installState) {
Intent intent = new Intent(DeviceSoftWareManager.installerAction);
intent.putExtra("Result", this.result);
sendBroadcast(intent);
}
}

//---------------------------------------------------------------------------------------------
class ApplicationInstallerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
result = true;
ApplicationInstaller.this.finish();
}
}
}

如果用户选择“安装”Intent.ACTION_PACKAGE... 将生成操作。

如果用户选择“不安装”,则 Activity 将退出而不执行 Intent.ACTION_PACKAGE... 操作。

这意味着“用户已取消安装”。

关于android - 如何检测用户取消程序 (".apk") 安装的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com