Android 读取外设U盘(USB)文件。

本文介绍了如何在Android应用中获取并使用U盘文件。首先,需要在AndroidManifest.xml中添加USB权限,然后注册USBReceiver广播接收器来监听USB设备的插入和移除。当USB设备插入时,通过ACTION_MEDIA_MOUNTED广播获取U盘路径,并加载U盘中的文件,例如图片。

在AndroidManifest文件中添加USB权限
    <uses-permission android:name="android.permission.USB_PERMISSION" />
    <uses-permission android:name="android.permission.MANAGE_USB"/>  
    <uses-feature android:name="android.hardware.usb.host" android:required="true"/>
      <uses-permission android:name="android.hardware.usb.accessory"/>

然后注册广播
 <receiver android:name=".USBReceiver">
            <intent-filter android:priority="200">
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
            </intent-filter>
            <intent-filter android:priority="200">
                <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_MOUNTED"/>
                <data android:scheme="file"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_EJECT"/>
                <data android:scheme="file"/>
            </intent-filter>
        </receiver>
写一个USB广播类USBReceiver 

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import java.io.File;
public class USBReceiver extends BroadcastReceiver {
//    private final String USB_DEVICE_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED";
    private final String USB_DEVICE_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED";
    private final String ACTION_MEDIA_MOUNTED = Intent.ACTION_MEDIA_MOUNTED;//媒体安装 - 获取USB路径需在媒体安装完成后获取
    public static String usbPath="";
    @Override
    public void onReceive(Context context, Intent intent) {
//        L.Companion.d("收到广播:" + intent.getAction());
        String action = intent.getAction();
        if (ACTION_MEDIA_MOUNTED.equals(action)) {//usb插入
//            L.Companion.d("usb已安装");
            Log.e("===", "usb插入");
            Toast_Util.ToastString(context, "==usb插入=");
            if (intent.getData() != null && intent.getData().getPath() != null) {
                  //usbPath = intent.getDataString()+"/下载字库.png";//(usb在手机上的路径)

                    usbPath = intent.getData().getPath()+"/下载字库.png";
                  Log.e("===", "usb插入=usbPath=="+usbPath);
                checkUsbFileList(context, intent.getData().getPath());
            }
        }
        if (USB_DEVICE_DETACHED.equals(action)) {//usb拔出
//            L.Companion.d("usb拔出");
            Log.e("===", "usb拔出");
            
        }
    }

    private void checkUsbFileList(Context context, String usbPath) {
//        L.Companion.d("usb路径:" + usbPath);
        String te="";
        File file = new File(usbPath);
        if (file.exists() && file.isDirectory()) {
            String[] files = file.list();
            for (int i = 0; i < files.length; i++) {
//                L.Companion.d("usb文件:" + files[i]);
                Log.e("===","==USB文件="+files[i]);
                te+=files[i];
            }            
        }
    }
}

usbPath=“/mnt/usb_storage/USB_DISK1/udisk0/下载字库.png”  这个是在U盘下的一张图片。想让这张图片直接显示出来。

Bitmap bitmap=getLoacalBitmap(usbPath);
   if(bitmap!=null)
    {
       image.setImageBitmap(bitmap);    
    }
/**
    * 加载本地图片
    * http://bbs.3gstdy.com
    * @param url
    * @return
    */
    private Bitmap getLoacalBitmap(String url) {
         try {
              FileInputStream fis = new FileInputStream(url);
              return BitmapFactory.decodeStream(fis);
         } catch (FileNotFoundException e) {
             Log.e(TAG, "===========文件错误=="+e.getMessage());
              e.printStackTrace();
              return null;
         }
    }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i_a_jun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值