1. 程式人生 > >Android6.0自帶檔案管理器無法開啟apk

Android6.0自帶檔案管理器無法開啟apk

Android從6.0開始在設定中自帶了一個檔案瀏覽器,在6.0之前系統是不自帶的,但是這個檔案管理器不能開啟apk檔案,不能安裝app。那是因為程式碼裡面沒有對APK檔案做識別處理,下面這個補丁可以幫你搞定.

diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index a57bcc6..1c41a78 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -27,6 +27,9 @@ import static com.android.documentsui.DirectoryFragment.ANIM_DOWN;
 import static com.android.documentsui.DirectoryFragment.ANIM_NONE;
 import static com.android.documentsui.DirectoryFragment.ANIM_UP;
 
+
+import java.io.File;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -642,12 +645,23 @@ public class DocumentsActivity extends BaseActivity {
             // Go straight to viewing
             final Intent view = new Intent(Intent.ACTION_VIEW);
             view.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-            view.setData(doc.derivedUri);
-
+           // view.setData(doc.derivedUri);
+            
+	    String path = doc.derivedUri.toString();
+            if(path.endsWith(".apk")){
+                String path1 = doc.documentId;
+                String path2 =path1.replace(":","/");
+                File file =new File("storage/"+path2);
+                 
+		view.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
+            }else{
+
+	     	view.setData(doc.derivedUri);
+	    }
             try {
                 startActivity(view);
             } catch (ActivityNotFoundException ex) {
-                Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
+		Toast.makeText(this, R.string.toast_no_application, Toast.LENGTH_SHORT).show();
             }
         }
     }