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
compileSdkVersion 29
minSdkVersion 24
targetSdkVersion 29
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