`
Leif_冬
  • 浏览: 46676 次
  • 性别: 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

 

 

分享到:
评论

相关推荐

    Android 之 将RAW资源文件写入SD卡工具类

    在Android开发中,有时我们需要将应用内部的RAW资源文件复制到外部存储(如SD卡)以便于用户访问或保存数据。这个"Android之将RAW资源文件写入SD卡工具类"是一个实用的功能,可以帮助开发者轻松完成这个任务。下面将...

    SD卡文件替换文件至指定目录并重命名 demo

    在Android平台上,SD卡(Secure Digital Card)是用于扩展设备存储空间的一种常见方式。随着智能手机和平板电脑存储需求的增长,SD卡的使用变得尤为重要。本文将深入探讨如何在Android应用中实现“SD卡文件替换文件...

    AndroidFileTransfer.dmg

    Mac查看Android文件(AndroidFileTransfer.dmg) Android File Transfer Browse and transfer files between your Mac computer and your Android device. DOWNLOAD NOW Supports macOS 10.7 and higher. By ...

    Android 文件存取

    本篇将详细探讨Android的内部存储、外部存储(包括SD卡存储)以及简单的文件管理,尤其是通过对话框实现的文件操作。 首先,让我们了解**内部存储**。Android为每个应用程序提供了私有的内部存储空间,这里的文件...

    Android实现复制Assets文件到SD卡

    在Android开发中,有时我们需要将应用内部的资源文件复制到外部存储(如SD卡)上,以便用户可以访问或操作这些文件。这个过程涉及到对Android系统API的理解,特别是与文件操作、AssetManager以及多线程处理相关的...

    本示例实现SD卡文件浏览器

    在Android系统中,SD卡(Secure Digital Card)是设备扩展存储的重要部分,用户通常需要访问和管理SD卡上的文件。本示例旨在帮助开发者实现一个功能完备的SD卡文件浏览器,使得用户能够方便地浏览、选择和操作SD卡上...

    可以COPY损坏文件可以COPY损坏文件COPY专家

    标题"可以COPY损坏文件可以COPY损坏文件COPY专家"暗示了我们关注的重点是如何处理和复制损坏的文件。在这个主题下,我们将深入探讨文件损坏的原因、如何识别损坏文件,以及如何尝试恢复或复制这些文件。 文件损坏...

    android 源码 文件管理器

    此外,Android提供了`ContentResolver`和`Uri`机制来访问存储在外部存储(如SD卡)或内部存储中的内容。 2. **目录浏览**:文件管理器的核心功能之一是能浏览任意目录。这需要实现递归遍历目录的功能,列出所有子...

    Android上传文件到 net服务器 包含两方代码

    在Android平台上将文件上传到.NET服务器是一项常见的任务,涉及到客户端(Android)与服务器端(.NET)的交互。本文将详细讲解如何实现这一过程,并提供相关的代码示例。 首先,客户端(Android)需要使用HTTP或者...

    FATFS文件系统复制文件和文件夹

    但是在复制文件夹时,发现了文件差异问题,例如复制的jpg文件存在7个字节的差异,PDF文件存在77字节的差异等。 文件复制函数mf_copy()使用了FATFS文件系统的API,实现了文件的复制功能。该函数将源文件psrc复制到...

    安卓文件下载上传解压相关-AndroidZIP文件下载以及解压.zip

    主要的存储位置包括内部存储(内部存储空间)和外部存储(SD卡或外部存储空间)。在Android应用中,通常会使用`getFilesDir()`,`getCacheDir()`,`getExternalFilesDir()`等方法来获取特定类型的存储路径。 2. **...

    远程连接及远程相互copy文件

    远程连接及远程相互copy文件 远程连接是一种允许用户从远程位置访问和控制计算机的技术。通过远程连接,可以实现远程桌面控制、文件传输、打印机共享等功能。下面将详细介绍远程连接的实现步骤和相关知识点。 一、...

    android 文件管理器实现

    在Android平台上,开发一个文件管理器是一个常见的任务,它允许用户查看、操作和管理设备上的文件和文件夹。本文将详细讲解如何实现一个基础的Android文件管理器,涵盖文件夹浏览、文件拷贝复制等功能。 首先,我们...

    文件copy 目录copy

    在IT行业中,文件复制(File Copy)和目录复制(Directory Copy)是日常操作的重要组成部分,无论是数据备份、软件部署还是系统迁移,都离不开这两个基本功能。下面将详细讲解这两个概念及其相关知识点。 文件复制...

    copy文件的bat程序

    保存文件时,将其命名为`copy_files.bat`,确保将"文件1 要复制的文件2 ..."替换为实际的文件名,并将"目标目录"替换为你希望复制到的路径。记得将文件扩展名从`.txt`改为`.bat`,然后关闭并运行该脚本。 批量复制...

    FastCopy 局域网文件拷贝

    FastCopy是一款高效、实用的文件复制工具,尤其在局域网环境中的文件传输表现卓越。它以其快速的拷贝速度和稳定的操作性能赢得了广大用户的喜爱。FastCopy在处理大量数据或者大文件时,能显著提高文件拷贝的效率,极...

    Fastcopy文件拷贝copy

    标题中的“Fastcopy文件拷贝copy”指的是一款名为Fastcopy的高效文件复制软件。Fastcopy因其极快的文件拷贝速度而闻名,它是由日本开发者设计并开发的一款工具,旨在提供比操作系统自带的文件复制功能更快速、更稳定...

    Copy File To Mobile

    "Copy File To Mobile"这个主题聚焦于如何将PC上的文件复制到手机上。以下是一些相关的重要知识点,以及如何实现这一过程。 1. **USB连接**:最常见的方式是通过USB线将手机与PC相连。确保你的手机开启USB调试模式...

    Android高级应用源码-Android 文件操作 列表显示 进入 退出 删除 复制 粘贴 新建文件等等.zip

    例如,写入外部存储(SD卡)需要`WRITE_EXTERNAL_STORAGE`权限,自Android 6.0(API level 23)起,运行时权限需要动态请求。 9. **适配多种设备和Android版本**: 文件操作的代码需要考虑到不同设备的差异和...

    文件快速复制FastCopy

    在日常的工作和生活中,我们经常需要将大量的文件或文件夹从一个位置复制到另一个位置。在这个过程中,速度和稳定性往往是用户最关心的问题。FastCopy,就是这样一款专为提升文件复制效率而设计的工具,它以其卓越的...

Global site tag (gtag.js) - Google Analytics