Как получить ответ от установщика android (успешно установлен apk или нет)? - PullRequest
0 голосов
/ 22 января 2020

Я занимаюсь разработкой приложения android (выступающего в роли контроллера), которое запустит установщик android для установки apk других моих приложений. Я инициировал процесс установки из своего приложения с помощью следующего кода:

Intent intent = new Intent(Intent.ACTION_VIEW);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Uri uri = FileProvider.getUriForFile(context, "com.example.android.fileprovider", updated_app_apk_file);
                intent.setDataAndType(uri,"application/vnd.android.package-archive");
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            } else {
                Uri apkUri = Uri.fromFile(updated_app_apk_file);
                intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            }

            startActivity(intent);

Вышеуказанный код откроет установщик android. У этого установщика android две кнопки. один из них «установить», а другой - «отменить».

Итак, мне нужно знать, нажал ли пользователь кнопку «установить» или «отменить». Как я могу получить эти ответы?

Далее мне нужно знать, успешно ли проходит установка (если пользователь нажал кнопку «установить»)?

Заранее спасибо.

1 Ответ

0 голосов
/ 22 января 2020

Наконец вместо startActivity (намерение) попробуйте использовать startActivityForResult (намерение, 1); и в методе обратного вызова добавьте следующий код.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// requestCode == 1 means the result for package-installer activity
if (requestCode == 1) 
{
    // resultCode == RESULT_CANCELED means user pressed `Done` button after installation
    if (resultCode == RESULT_CANCELED) {
        Toast.makeText(this, "Done button pressed", Toast.LENGTH_SHORT).show();
    } 
    else{ 
        //Check for the packagename to verify if user clicked on cancle button
        return isAppInstalled(context, "com.packagename");
    }
}
  super.onActivityResult(requestCode, resultCode, data);
}

Теперь нам нужно создать метод, который будет проверять конкретный пакет в системе, установлено ли приложение, и будет возвращать true, иначе false.

public static boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    }
    catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

Надеюсь, это поможет ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...