2017-08-17 88 views
1

我寫了一個方法來安裝apk的所有版本的Android,它的作品,直到android 8。但似乎安卓8不響應這種方法以編程方式安裝apk在Android 8(API 26)

install_apk(File file) { 
     try { 
      if (file.exists()) { 
       String[] fileNameArray = file.getName().split(Pattern.quote(".")); 
       if (fileNameArray[fileNameArray.length - 1].equals("apk")) { 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
         Uri downloaded_apk = getFileUri(context, file); 
         Intent intent = new Intent(Intent.ACTION_VIEW).setDataAndType(downloaded_apk, 
           "application/vnd.android.package-archive"); 
         intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
         context.startActivity(intent); 
        } else { 
         Intent intent = new Intent(Intent.ACTION_VIEW); 
         intent.setDataAndType(Uri.fromFile(file), 
           "application/vnd.android.package-archive"); 
         intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
         context.startActivity(intent); 
        } 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

這種方法得到的URI上API> = 23

Uri getFileUri(Context context, File file) { 
     return FileProvider.getUriForFile(context, 
       context.getApplicationContext().getPackageName() + ".HelperClasses.GenericFileProvider" 
       , file); 
    } 
+0

您是否收到錯誤消息?是否有堆棧跟蹤?它如何失敗? – JoeHz

+0

我有不同的API的模擬器,每一件事情都是好的,只是在API之前26 –

+0

logcat中沒有顯示錯誤 –

回答

4

你應該添加一個新的權限。

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>