Как определить ситуацию, когда пользователь отменяет установку программы («.apk»)? - PullRequest
3 голосов
/ 08 июля 2011

Как определить ситуацию, когда пользователь отменяет установку приложения (файл .apk)?

Мое приложение программно устанавливает другие приложения, но пользователи могут отменить процесс установки.Во время установки пользователь видит следующее диалоговое окно: «Заменить приложение. Установленное вами приложение заменит другое приложение» .А затем диалоговое окно «Хотите установить это приложение?» .Если пользователь нажимает «Установить», генерируется ACTION_PACKAGE_... трансляция.Но как определить, нажимает ли пользователь «Отмена»?

Ответы [ 2 ]

5 голосов
/ 12 августа 2011
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... действий.

Это означает, что «пользователь отменил установку».

1 голос
/ 08 июля 2011

Я думаю, что вы не можете определить, удаляет ли пользователь приложение или нет, но вы можете проверить, установлены ли другие необходимые приложения при запуске приложения или после выполнения действия

...