Als ich versuchte, eine Anwendung zu erstellen, die nach langer Zeit aktualisiert und installiert wird, gab es verschiedene Änderungen an der Behörde, sodass ich ein Memo schrieb
compileSdkVersion 29
minSdkVersion 24
targetSdkVersion 29
Verwenden Sie die folgenden Berechtigungen, wenn Sie mit Intent zum Installationsprogramm springen
AndroidManifest.xml
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
Muss über File Provider erfolgen, um Dowloaded apk zu installieren Viele Artikel verwenden immer noch SupportLibrary.v4, aber dieses Mal werde ich Androidx verwenden
build.gradle
implementation 'androidx.core:core:{current version}'
FileProvider wird wie folgt hinzugefügt
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>
Überspringen Sie es anschließend, wie in verschiedenen Artikeln beschrieben, mit der Absicht, die für jede Android-Version geeignet war
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);
}
Ich denke, es kann sich je nach Umgebung ändern, aber das ist genug das ist alles
Recommended Posts