[JAVA] Remarques sur l'appel du programme d'installation sur l'application Android

Lorsque j'ai essayé de créer une application qui se met à jour et s'installe après une longue période, il y a eu divers changements autour de l'autorité, alors j'ai écrit un mémo

environnement

compileSdkVersion 29 minSdkVersion 24 targetSdkVersion 29

Code source

Utilisez ce qui suit pour l'autorisation lors du passage au programme d'installation avec intention

AndroidManifest.xml


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

Doit être via le fournisseur de fichiers pour installer l'apk téléchargé De nombreux articles utilisent encore SupportLibrary.v4, mais cette fois j'utiliserai androidx

build.gradle


implementation 'androidx.core:core:{current version}'

FileProvider est ajouté comme ci-dessous

AndroidManifest.xml


<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true" >
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/file_paths"/>
</provider>

Après cela, comme écrit dans divers articles, sautez-le simplement avec l'intention qui convenait à chaque version d'Android

MainActivity.java


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                Uri fileUri = FileProvider.getUriForFile(MainActivity.this,
                        MainActivity.this.getApplicationContext().getPackageName() + ".fileprovider",
                        file);
                Intent i = new Intent(Intent.ACTION_INSTALL_PACKAGE);
                i.setData(fileUri);
                i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                MainActivity.this.startActivity(i);
            } else {
                Uri fileUri = Uri.fromFile(file);
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setDataAndType(fileUri, APK_MIME_TYPE);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                MainActivity.this.startActivity(i);
            }

Je pense que cela peut changer en fonction de l'environnement, mais cela suffit c'est tout

Recommended Posts

Remarques sur l'appel du programme d'installation sur l'application Android
[Android] Notes sur xml
Développement d'applications ROS sur Android
Remarques sur le traitement des threads Android (java)
Appeler java depuis C ++ sur Android NDK
Remarques sur la création d'un plug-in Android pour Unity
J'ai créé une application de calculatrice sur Android
Permet la lecture automatique de Youtube même avec l'application Android de Cordova
Application météo Android
[Android] Notes détaillées
Remarques sur le rappel de TextToSpeech
Remarques sur les tampons de protocole
mémo python sur docker
Analyseur de spectre d'application Android
Remarques sur l'héritage multiple
Notes sur les expressions régulières
[Version de préservation 2018] Application Android d'ingénierie inverse (.apk) sur Mac
Remarques sur le studio Android
À propos des composants de l'application Android
Personnaliser la vue de liste sur Android
Lancement du développement personnel de l'application Android
Utiliser la communication série sur Android
Créez une application Android. (Jour 5)
Utiliser le code natif sur Android
[Ruby] Notes sur la méthode gets
Lancement de l'application No Todo au lieu de Todo. .. (Et notes faîtières)