2016-09-14 2 views
7

मेरे ऐप में एक ऑटो अपडेट सुविधा है जो एक एपीके डाउनलोड करती है और फिर पैकेज इंस्टॉलर खोलने के लिए एक Intent.ACTION_VIEW का उपयोग करती है।ACTION_VIEW के साथ एंड्रॉइड 7 ओपन एपीके काम नहीं कर रहा है (पैकेज इंस्टॉलर बंद हो गया है)

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 के साथ एक बग है मिल सकता है? या कुछ पक्ष/अनुमति मेरी तरफ गुम है?

संपादित 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

@ जॉनी 1 हे, मुझे एक ही समस्या है ... आपने इसे कैसे ठीक किया है ..., कृपया मुझे – Mariyappan

उत्तर

2

अपने इरादे को uri अनुमति पढ़ा जोड़ने की कोशिश xmlfile:

installIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

चेक इस जवाब https://stackoverflow.com/a/40131196/1912947

1

की तरह नीचे की कोशिश, यह मेरे और एंड्रॉयड 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

मेरा दिन बचाया! यह स्वीकार्य उत्तर होना चाहिए। –

संबंधित मुद्दे