2016-09-14 19 views
7

私のアプリはAPKをダウンロードしてIntent.ACTION_VIEWを使用してパッケージインストーラを開く自動更新機能を備えています。Android 7はAPTION_VIEWが動作していないAPKです(パッケージインストーラは停止しています)

は7までには(通常のファイルとの意向を供給することによって://)完全に働いたアンドロイド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が、私は

enter image description here

毎回これを取得する呼び出されると、これはAndroidの7のバグですか?または何か/私の側が不足していますか?

EDIT 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> 

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

を私とその作業を助けましたか? – Techidiot

+0

私はそれを追加しました。これはエミュレータと実際のハンドセットで発生することに注意してください。 – Johny19

+0

@ Johny19ちょっと同じ問題があります...あなたはそれをどのように修正しましたか...、私に指示してください – Mariyappan

答えて

2

てみてください、あなたの意思にURI読み取り権限を追加するXMLFILEパス:

installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

チェックこの回答 https://stackoverflow.com/a/40131196/1912947

1

は、以下のようにしてみてください、それはあなたがあなたのマニフェストを投稿することができますAndroidのN7.0に

File toInstall = new File(appDirectory, appName + ".apk"); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    Uri apkUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID + ".provider", toInstall); 
    Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE); 
    intent.setData(apkUri); 
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    activity.startActivity(intent) 
} else { 
    Uri apkUri = Uri.fromFile(toInstall); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    activity.startActivity(intent); 
} 
+0

私の一日が保存されました!それは受け入れられた答えでなければなりません。 –

関連する問題