2016-09-14 16 views
7

Moja aplikacja ma funkcję automatycznej aktualizacji, która pobiera plik APK, a następnie korzysta z pliku Intent.ACTION_VIEW do otwarcia instalatora pakietów.Android 7 otwarty pakiet APK z ACTION_VIEW nie działa (pakiet instalacyjny został zatrzymany)

do 7 to działało idealnie (przez karmienie intencyjny z normalnego pliku: //)

Z Androidem 7 musiałem zmienić użyć FileProvider. Jedyna różnica w kodzie jest:

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); 

Po startActivity nazywa się uzyskać to za każdym razem

enter image description here

Jest to błąd z Androidem 7? Czy coś/pozwolenie nie ma mojej strony?

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> 

Ścieżka xmlfile

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

Możesz opublikować manifest? – Techidiot

+0

Dodałem go. Zauważ, że dzieje się to zarówno na emulatorze, jak i na prawdziwych słuchawkach. – Johny19

+0

@ Johny19 hej Mam ten sam problem ... jak to naprawiłeś ..., proszę naprowadź mnie – Mariyappan

Odpowiedz

1

spróbować jak poniżej, to pomogło mi i jego pracy w 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

Uratowałem mój dzień! To musi być zaakceptowana odpowiedź. –

Powiązane problemy