12

私のアプリには、APK をダウンロードしてから Intent.ACTION_VIEW を使用してパッケージ インストーラーを開く自動更新機能があります。

7までは完全に機能しました(インテントに通常のfile://を供給することにより)

Android 7 では、FileProvider を使用するように変更する必要がありました。コードの唯一の違いは次のとおりです。

Intent installIntent = new Intent(Intent.ACTION_VIEW);
          if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
            installIntent.setDataAndType(uri,
                manager.getMimeTypeForDownloadedFile(downloadId));
          } else {

            Uri apkUri = FileProvider.getUriForFile(AutoUpdate.this,
                BuildConfig.APPLICATION_ID, file);
              installIntent.setDataAndType(apkUri,manager.getMimeTypeForDownloadedFile(downloadId));
          }
          activity.startActivity(installIntent);

startActivity が呼び出されると、毎回これを取得します

ここに画像の説明を入力

これは Android 7 のバグですか? または、何か/許可が私の側にありませんか?

AndroidManifest の編集

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.READ_LOGS" />

 <application ...>
 ...
   <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="com.myapp"
            android:exported="false"
            android:enabled="true"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        </provider>
  </application>

パス xmlfile

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="myfolder" path="."/>
</paths>
4

2 に答える 2