`
Leif_冬
  • 浏览: 47927 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

android 從內部存儲空間Copy 文件到外部SD卡連接PC能及時發現文件(Transfer files 模式)

阅读更多

問題描述:文件從內部存儲空間拷貝到外部SD卡時,連接PC選擇Transfer files 模式,如果不重啓機器剛剛copy過來的文件不能在PC上的目錄中發現

 

解決方法:

  1. Android 4.4以前,我们可以使用Intent.ACTION_MEDIA_MOUNTED,让Android系统重新扫描一遍SD卡,这样PC就能同步文件管理器的操作了。
  2. Android 4.4以后,google可能是发现了每次调用这个intent都会重新扫描SD卡,非常耗费系统资源,所以禁止非系统应用使用这个intent了。
  3. 需要修改android/packages/providers/MediaProvider/src/com/android/providers/media/MediaScannerReceiver.java增加scan SD卡的方法,具體代碼如下:

 

leif@leif:~/Git/Arashi9500/LA.UM.6.2/LINUX/android/packages/providers/MediaProvider$ git diff
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b4c9e64..6082245 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -54,6 +54,9 @@
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
             <intent-filter>
+                <action android:name="android.hardware.usb.action.USB_STATE" />
+            </intent-filter>
+            <intent-filter>
                 <action android:name="android.intent.action.MEDIA_MOUNTED" />
                 <data android:scheme="file" />
             </intent-filter>
diff --git a/src/com/android/providers/media/MediaScannerReceiver.java b/src/com/android/providers/media/MediaScannerReceiver.java
index 8a098af..2de593b 100644
--- a/src/com/android/providers/media/MediaScannerReceiver.java
+++ b/src/com/android/providers/media/MediaScannerReceiver.java
@@ -24,6 +24,7 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Environment;
 import android.util.Log;
+import android.hardware.usb.UsbManager;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,6 +39,14 @@ public class MediaScannerReceiver extends BroadcastReceiver {
         if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
             // Scan internal only.
             scan(context, MediaProvider.INTERNAL_VOLUME);
+        } else if (UsbManager.ACTION_USB_STATE.equals(action)) {
+            Bundle extras = intent.getExtras();
+            boolean connected = extras.getBoolean(UsbManager.USB_CONFIGURED);
+                if (connected) {
+                    // Scan both internal and external storage
+                    scan(context, MediaProvider.INTERNAL_VOLUME);
+                    scan(context, MediaProvider.EXTERNAL_VOLUME);
+                }
         } else {
             if (uri.getScheme().equals("file")) {
                 // handle intents related to external storage

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics