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...
アクションが生成されます。
ユーザーが「インストールしない」を選択した場合、アクティビティはIntent.ACTION_PACKAGE...
アクションなしで終了します。
これは、「ユーザーがインストールをキャンセルしました」という意味です。
何ですか?もっとよく説明してください... – evilone
私のアプリケーションは、他のアプリケーションをプログラムによって(または更新して)インストールします。しかし、インストール中に、ユーザーには「アプリケーションを置き換える、インストールしているアプリケーションが別のアプリケーションを置き換える」というようなダイアログが表示されます。次に、「このアプリケーションをインストールしますか?」というダイアログが表示されます。ユーザーが「インストール」を押すと、ACTION_PACKAGE ...が生成されます。しかし、ユーザーは「キャンセル」を押していますか?それをどのように検出するのですか? – alexeykoval
この問題は解決しましたか?私はここで同じことをしている。 – YasuDevil