Android Studio的代码笔记--USB接口、读写文件、字符串分割、输入设备信息等学习

USB接口

通用串行总线(英语:Universal Serial Bus,缩写:USB)是一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。
USB是一个外部总线标准,规范电脑与外部设备的连接和通讯。USB接口具有热插拔功能。USB接口可连接多种外设,如鼠标和键盘等。

USB外部存储设备广播监听事件

外部存储设备的状态变化时发出的广播SD卡、U盘等外部存储设备
ACTION_MEDIA_BAD_REMOVAL外部存储媒体已经从SD卡槽中移除,但其挂载节点还没有被卸载。挂载节点的路径仍然包含在Intent.mData字段里。
ACTION_MEDIA_BUTTON“Media”按钮被按下。包括一个额外的字段,EXTRA_KEY_EVENT,导致了这个广播包含该关键事件
ACTION_MEDIA_CHECKING外部存储媒体存在,并且将要被检查。挂载节点的路径包含在Intent.mData字段里。
ACTION_MEDIA_EJECT用户表示希望删除外部存储媒体。当应用程序收到这个意图时,应当关闭在此挂载节点打开的所有文件。
ACTION_MEDIA_MOUNTED外部存储媒体存在,并且已经挂载成功。挂载节点的路径包含在Intent.mData字段里。此外Intent还包含了一“read-only”的布尔型附加信息用来表示此存储媒体是否为只读,antGreen
AcTION_MEDIA_NOFS外部存储媒体存在,但系统不兼容它。挂载节点的路径包含在Intent.mData字段里。
ACTION_MEDIA_REMOVED外部存储媒体已经被移除。其挂载节点的路径包含在Intent.mData字段里。
AeTION_MEDIA_SCANNER_FINISHED存储媒体扫描器完成了一个路径的扫描。扫描的路径包含在Intent.mData字段里。
ACTION_MEDIA_SCANNER_SCAN_PILE请求媒体扫描器扫描一个文件,并将它添加到媒体数据库。被扫描到的文件路径包含在Intent.mData字段里。
ACTION_MEDIA_SCANNER_STARTED存储媒体扫描器开始扫描一个目录。将要扫描的路径包含在Intent.mData字段里。

可以分四种情况

  1. 插入外部SD卡时:
    android.intent.action.MEDIA_CHECKING
    android.intent.action.MEDIA_MOUNTED
    android.intent.action.MEDIA_SCANNER_STARTED
    android.intent.action.MEDIA_SCANNER_FINISHED
  2. 移除外部SD卡时:
    android.intent.action.MEDIA_EJECT
    android.intent.action.MEDIA_UNMOUNTED
    android.intent.action.MEDIA_SCAnER_STARTED
    android.intent.action.MEDIA_BAD_REMOVAL
    android.intent.action.MEDIA_SCANMNER_FINISHED
  3. 连接PC进入USB大容量存储模式时:
    android.intent.action.MEDIA_EJECT
    android.intent.action.MEDIA_UNMOUNTED
    android.intent.action.MEDIA_UNMOUNTED
    android.intent.action.MEDIA_SHARED
  4. 连接PC退出USB大容量存储模式时:
    android.intent.action.MEDIA_UNMAOUNTED
    android.intent.action.MEDIA_CHECKING
    android.intent.action.MEDIA_MOUNTED
    android.intent.action.MEDIA_SCANNER_STARTED
    android.intent.action.MEDIA_SCANNER_FINISHED

动态注册广播,利用拔插广播监听USB存储设备的接入弹出,记得注销广播

    @Override
    protected void onResume(){
        super.onResume();
        IntentFilter intentFilter_USB = new IntentFilter();
        intentFilter_USB.addAction("com.android.example.USB_PERMISSION");
        intentFilter_USB.addAction(ACTION_USB_DEVICE_ATTACHED);//动作USB设备已连接
        intentFilter_USB.addAction(ACTION_USB_DEVICE_DETACHED);//动作USB设备已分离
        intentFilter_USB.addAction(ACTION_MEDIA_MOUNTED);//动作媒体安装
        intentFilter_USB.addAction(ACTION_MEDIA_REMOVED);//行动媒体被删除
        registerReceiver(receiver_USB, intentFilter_USB);
    }
    private BroadcastReceiver receiver_USB = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            switch (action) {
                case ACTION_USB_DEVICE_ATTACHED:
                    Log.i("LXH", "USB设备连接");
                    break;
                case ACTION_USB_DEVICE_DETACHED:
                    Log.i("LXH", "USB设备连接断开");
                    break;
                case ACTION_MEDIA_MOUNTED:
                    Log.i("LXH", "USB加载完毕");
                    break;
                case ACTION_MEDIA_UNMOUNTED:
                    Log.i("LXH", "USB取消挂载");
                    break;
            }
        }
    };
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver_USB);
    }

运行后将U盘接入USB接口,再弹出U盘,得到日志为
在这里插入图片描述

onResume()是当该activity与用户能进行交互时被执行,用户可以获得activity的焦点,能够与用户交互。onResume()是onPause()(通常是当前的acitivty被暂停了,比如被另一个透明或者Dialog样式的Activity覆盖了),之后dialog取消,activity回到可交互状态,调用onResume()。看到的一篇 onstart和resumed区别.
网友写的很好

USB外部存储设备获取

获取USB接口上的外部存储设备,插入两个U盘在接口上,如果接的不是存储设备而是输入设备如鼠标、键盘灯,则不显示出来

UsbManager usbManager;//USB初始化
PendingIntent pendingIntent;//USB权限
UsbDevice usbDevice_link;//USB设备
usbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, new Intent("com.android.example.USB_PERMISSION"), 0);
HashMap<String, UsbDevice> deviceHashMap = usbManager.getDeviceList();
Iterator<UsbDevice> iterator = deviceHashMap.values().iterator();
while (iterator.hasNext()) {
    UsbDevice device = iterator.next();
    Log.i("LXH","获取到的USB设备有 DeviceName:"+device.getDeviceName()+",VendorId:"+device.getVendorId()+",ProductId:"+device.getProductId());
    usbDevice_link=device;
}

运行日志:
在这里插入图片描述获取USB接口外部存储设备地址

   /**
     * @LXH 获取USB A接口的路径
     * @return A接口的路径
     */
    public String get_USBpath_A() {
        String USBpath_A = "";
        File file_a = new File("/mnt/sda/");//海思U盘挂载路径
        if (file_a.exists()) {
            for (File subFile : file_a.listFiles()) {
                File findFile = new File(subFile.getPath());
                if (findFile.exists()) {
                    Tag_USB_a = true;
                    USBpath_A = findFile.getPath();
                    text_USB_a = USBpath_A;
                    Log.i("LXH", "获取当前的USB接口路径有A:" + text_USB_a);
                    break;
                }
            }
        }
        return USBpath_A;
    }

运行日志
在这里插入图片描述

文件

获取指定文件路径

 /**
     * @LXH 获取指定文件路径
     * @return 指定文件路径
     */
    public String  get_Filepath_LXH(){
        String filepath_LXH="";
        File file=new File("/mnt/sda/");
        if(file.exists())
        {
            for (File subFile :file.listFiles())
            {
                File findFile=new File(subFile.getPath()+"/LXH.txt");
                if(findFile.exists())
                {
                    file_usb=subFile;
                    Tag_USB_pz=true;
                    filepath_LXH=findFile.getPath();
                    text_USB_pz=filepath_LXH;
                    Log.i("LXH","U盘下的指定文件路径:"+text_USB_pz);
                    break;
                }
            }
        }
        return filepath_LXH;
    }

获取文件下的所有文件

    File ffile = new File(text_USB_a);
    get_Fileall(ffile);
/**
     * @LXH 获取文件下的所有文件
     * @param path 该文件
     */
    public void get_Fileall(File path){
        File files[] = path.listFiles();
        if(files != null){
            for (File f : files){
                if(f.isDirectory()){
                    get_Fileall(f);
                }else{
                    Log.i("LXH","该文件下:" + f);
                }
            }
        }
    }

读取文件路径下的数据

       try {
            get_File(text_path);
        } catch (IOException e) {
            e.printStackTrace();
        }
/**
     * @LXH 读取文件路径下的数据
     * @param filePathName
     * @return  读取的数据   类型:字符串
     * @throws IOException
     */
    public String get_File(String filePathName) throws IOException {
        String get_file="";
        StringBuffer stringBuffer = new StringBuffer();
        String storageState = Environment.getExternalStorageState();
        if (storageState.equals(Environment.MEDIA_MOUNTED)) {
            FileInputStream fileInputStream = new FileInputStream(filePathName);
            byte[] buffer = new byte[1024];
            int len = fileInputStream.read(buffer);
            while (len > 0) {
                stringBuffer.append(new String(buffer, 0, len));
                len = fileInputStream.read(buffer);
            }
            fileInputStream.close();
        }
        get_file=stringBuffer.toString();
        text_USB_pznr=get_file;Tag_USB_pznr=true;
        Log.i("LXH","读取文件的内容为:"+get_file);
        return get_file;
    }

写数据到文件路径下

        try {
            write_File(text_path,"configure=1,\nversion=2,\nLXH=5,");
        } catch (IOException e) {
            e.printStackTrace();
        }
/**
     * @LXH 写文件数据进去
     * @param filePathName 文件
     * @param content 数据字符串
     * @throws IOException
     */
    public void write_File(String filePathName, String content) throws IOException {
        String storageState = Environment.getExternalStorageState();
        if (storageState.equals(Environment.MEDIA_MOUNTED)) {
            FileOutputStream fileOutputStream = new FileOutputStream(filePathName);
            fileOutputStream.write(content.getBytes());
            fileOutputStream.close();
        }
    }

字符串分隔

configure=1,
version=2,

/**
     * @LXH 拆分字符串
     * @param filedata 字符串
     */
    public void split_String(String filedata){
        String str = null;
        str = filedata;
        if (str != null) {
            String[] arrayOfString1 = str.split(",");
            for (int i = 0; i < arrayOfString1.length; i++) {
                String string = arrayOfString1[i];
                if (string.contains("configure")){
                    Log.i("LXH",string.split("=")[0]+" 的值为:"+string.split("=")[1]);
                } else if (string.contains("version")) {
                    Log.i("LXH",string.split("=")[0]+" 的值为:"+string.split("=")[1]);
                }
            }
        }
    }

读取文件的内容为:configure=1,
version=2,
LXH=5,
configure 的值为:1
version 的值为:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值