APK не установлен на Android (когда целевая версия Sdk в build.gradle равна 28) - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу установить программу, которую я скачал из своей программы, но когда я помещаю targetSdkVersion 25 в файл build.gradle, apk устанавливается , но когда я добавлю targetSdkVersion в 28 в файле сборки сборки, apk не будет установлен , и программа работает до строки startActivity (намерение), но не устанавливается, и в logcat нет сообщений об ошибках.

Путь к файлу APK

"/sdcard/Android/data/com.****.****/Version/update.apk"

в манифестах

<application
            .....>

            <provider
                android:name="android.support.v4.content.FileProvider"
                android:authorities="${applicationId}.authorityStr"
                android:exported="false"
                android:grantUriPermissions="true">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/provider_paths"/>
            </provider>
</application>

в XML provider_paths

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="sdcard"
        path="Android/data/com.****.*****/Version/"/>
</paths>

в файле build.gradle

compileSdkVersion 28
    defaultConfig {
        applicationId "*****"
        minSdkVersion 15
        targetSdkVersion 28 //when change to targetSdkVersion 25 apk installed
        versionCode 1
        versionName "1.5"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        signingConfig signingConfigs.config
    }

в Java для установки APK

public static void InstallApk(String filename) {
        try {
            File file = new File(filename);
            if (file.exists()) {
                if (Build.VERSION.SDK_INT > 22) {
                    Uri fileUri = Uri.fromFile(file);
                    if (Build.VERSION.SDK_INT >= 24) {
                        fileUri = FileProvider.getUriForFile(Context, Context.getPackageName() + ".authorityStr",
                                file);
                    }
                    Intent intent = new Intent(Intent.ACTION_VIEW, fileUri);
                    intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
                    intent.setDataAndType(fileUri, "application/vnd.android" + ".package-archive");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

                    Context.startActivity(intent);
                } else {
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                    Context.startActivity(install);
                }
            }
        } catch (Exception ex) {
            Log.d(Variable.TagMessage, ex.getMessage());
        }
    }

1 Ответ

0 голосов
/ 23 марта 2019

разрешение на первое добавление в файл манифестов

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

в Java для установки APK

public static void InstallApk(String filename) {
        try {
            File file = new File(filename);
            if (file.exists()) {
                if (Build.VERSION.SDK_INT > 22) {
                    Uri fileUri = Uri.fromFile(file);
                    if (Build.VERSION.SDK_INT >= 24) {
                        fileUri = FileProvider.getUriForFile(Context, Context.getPackageName() + ".authorityStr",
                                file);
                    }
                    Intent intent = new Intent(Intent.ACTION_VIEW, fileUri);
                    intent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
                    intent.setDataAndType(fileUri, "application/vnd.android" + ".package-archive");
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK |
                        Intent.FLAG_ACTIVITY_NEW_TASK |
                        Intent.FLAG_GRANT_READ_URI_PERMISSION);

                    Context.startActivity(intent);
                } else {
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                    Context.startActivity(install);
                }
            }
        } catch (Exception ex) {
            Log.d(Variable.TagMessage, ex.getMessage());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...