欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Android中App與U盤通信的示例分析-創(chuàng)新互聯(lián)

這篇文章主要介紹了Android中App與U盤通信的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

目前成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站托管、服務器托管、企業(yè)網(wǎng)站設計、沙灣網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

一、自定義廣播接收器接收 U 盤相關的信息

在 U 盤插入或插出的時候,系統(tǒng)都會發(fā)出一條相關的廣播,所以我們需要自定義廣播接收器,接收這兩條廣播,然后進行相應的處理。

public class OtgReceiver extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  String action = intent.getAction();
  switch (action) {
   // 接收到 U 盤插入廣播
   case UsbManager.ACTION_USB_DEVICE_ATTACHED:
    showToast(context, "U 盤已插入");
     // 獲取相關的 Usb 設備
    UsbDevice attachUsbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
    if (attachUsbDevice != null) {
      // 進行權限申請
     permissionRequest();
    }
    break;
   // 接收到 U 盤拔出廣播
   case UsbManager.ACTION_USB_DEVICE_DETACHED:
    showToast(context, "U 盤已拔出");
    break;
   default:
    break;
  }
 }
}

因為 Usb 相關的設備操作,需要申請相關的權限,所以在接收到 U 盤插入的廣播之后,我們需要進行權限申請。

private void permissionRequest() {
  // 設備管理器
  UsbManager usbManager = (UsbManager) MainActivity.getContext().get().getSystemService(Context.USB_SERVICE);
  // 獲取 U 盤存儲設備
  UsbMassStorageDevice[] storageDevices = UsbMassStorageDevice.getMassStorageDevices(OtgApplication.getContext());
  PendingIntent pendingIntent = PendingIntent.getBroadcast(OtgApplication.getContext(), 0, new Intent(ACTION_USB_PERMISSION), 0);
  // 進行權限申請
  usbManager.requestPermission(device.getUsbDevice(), pendingIntent);
 }

可以看到我們在申請權限的時候,傳入了一個 PendingIntent,PendingIntent 里面?zhèn)魅胛覀冏远x的廣播 ACTION_USB_PERMISSION,等到權限申請完成,便會發(fā)出這條廣播,然后我們可以在廣播接收器中接收并處理,從而進行后續(xù)的操作。

case ACTION_USB_PERMISSION:
  UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
  if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
   if (usbDevice != null) {
    // 讀取 U 盤相關的信息
    readDevice(getUsbMass(usbDevice));
   } else {
    showToast(context, "沒有插入 U 盤");
   }
  } else {
   showToast(context, "未獲取到 U 盤權限");
  }
  break;

為了簡化相關的代碼,我導入 Github 上開源的 libaums ,所以需要在 build.gradle 里面加上

compile 'com.github.mjdev:libaums:0.5.5'

通過接收我們自定義的廣播,便可以從 Intent 里面獲取相應的包含 U 盤信息的 UsbDevice

private void readDevice(UsbMassStorageDevice device) {
   device.init(); 
   // 設備分區(qū)
   Partition partition = device.getPartitions().get(0);
   // 文件系統(tǒng)
   FileSystem currentFs = partition.getFileSystem();
   // 獲取 U 盤的根目錄
   mRootFolder = currentFs.getRootDirectory();
   // 獲取 U 盤的容量
   long capacity = currentFs.getCapacity();
   // 獲取 U 盤的剩余容量
   long freeSpace = currentFs.getFreeSpace();
   // 獲取 U 盤的標識
   String volumeLabel = currentFs.getVolumeLabel();
 }

二、將文件導入到 U 盤中

通常我們將手機跟 U 盤通過 OTG 線進行連接,都是為了將手機里面的文件導入到 U 盤中,我們就以圖片為例子,看看怎樣將圖片導出到 U 盤中。

將圖片導出到 U 盤中,我們可以通過流來實現(xiàn),先在 U 盤對應的目錄,創(chuàng)建新的 jpg/png 格式的文件,然后通過 BitmapFactory 將圖片轉(zhuǎn)換成 Bitmap,再進一步拿到對應圖片的 ByteArrayOutputStream,最后將對應的字節(jié)寫入文件中。

public static void savePictureToUsb(String picturePath, UsbFile root) {
  UsbFile newDir = root.createDirectory("Haoz" + System.currentTimeMillis());
  UsbFile file = newDir.createFile("Haoz" + System.currentTimeMillis() + ".jpg");
  Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
  OutputStream outputStream = new UsbFileOutputStream(file);
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
  outputStream.write(out.toByteArray());
  outputStream.flush();
  outputStream.close();
  file.flush();
  file.close();
 }

可以看到我們傳入圖片的路徑以及 U 盤的根目錄,便可以將圖片寫入到 U 盤中,在上一節(jié)中,我們已經(jīng)通過廣播拿到 U 盤的根目錄,所以直接用就行了。將文件從 U 盤中導入到手機中,其實思路也是一樣的。畢竟當 U 盤插入手機的那一刻,將 U 盤當成手機的一個普通的目錄來處理就行了。

三、該注意的地方

雖然說,U 盤跟手機之間的通信相對來說不是很難,但其實也有很多需要注意的地方,也是筆者在開發(fā)過程中踩過的坑,這里都記錄出來,供大家參考。

3.1 獲取圖片的路徑

我們通過圖片選擇庫或者照相機回調(diào)出來的,很多時候都是圖片的 Uri,而要得到圖片對應的 Bitmap 需要的是圖片的真實路徑,我們可以通過以下方法進行轉(zhuǎn)換。

public static String getPath(ContentResolver resolver, Uri uri) {
  if (uri == null) {
   return null;
  }

  if (SCHEME_CONTENT.equals(uri.getScheme())) {
   Cursor cursor = null;
   try {
    cursor = resolver.query(uri, new String[]{MediaStore.Images.ImageColumns.DATA},
      null, null, null);
    if (cursor == null || !cursor.moveToFirst()) {
     return null;
    }
    return cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));
   } finally {
    if (cursor != null) {
     cursor.close();
    }
   }
  }
  return uri.getPath();
 }

3.2 文件相關的讀寫操作

文件相關的讀寫操作都是比較耗時的,特別是當文件比較大的時候。所以我們不能在主線程中進行文件的讀寫,必須將其放在子線程中,等 I/O 操作完成了,再轉(zhuǎn)換到主線程中進行操作。

3.3 廣播的注冊與移除

因為我們是自定義廣播接收器來接收相應的廣播,所以需要在 Activity 中進行廣播的動態(tài)注冊,將對應 Action 進行過濾。最后不要忘記了在 onDestroy() 中移除廣播,防止內(nèi)存泄露。

private void registerUDiskReceiver() {
  IntentFilter usbDeviceFileter = new IntentFilter();
  usbDeviceFileter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
  usbDeviceFileter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
  usbDeviceFileter.addAction(Intent.ACTION_MEDIA_MOUNTED);
  registerReceiver(mOtgReceiver, usbDeviceFileter);
  // 注冊監(jiān)聽自定義廣播
  IntentFilter filter = new IntentFilter(OtgReceiver.ACTION_USB_PERMISSION);
  registerReceiver(mOtgReceiver, filter);
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  unregisterReceiver(mOtgReceiver);
 }

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Android中App與U盤通信的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!

網(wǎng)站名稱:Android中App與U盤通信的示例分析-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://aaarwkj.com/article4/ddogoe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航網(wǎng)站維護、ChatGPT網(wǎng)站設計公司、網(wǎng)站收錄、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
色综合色综合色综合色综合| 日本免费一区二区三区的电影啊| 2022国产精品一区| 日韩亚洲国产激情一区二区| 一区二区三区四区中文在线| 日韩国产推荐一区二区| 97色伦97色伦国产在线| 一区二区三区四区毛片| 国产福利在线观看午夜| 一本色道久久亚洲综合精品蜜桃 | 国产亚洲一区二区三区午夜 | 亚洲综合国产一二三四五区| 亚洲中文字幕精品一区二区三区| 国产三级精品三级在线专区1| 夜夜嗨av一区二区三区| 欧美两性色一区二区三区| 一区二区亚洲免费的视频| 亚洲日本av一区二区| 亚洲精品国产二区中文字幕| 久久精品色一情一乱一伦| 日本午夜免费在线视频| 亚洲av色男人天堂网| 亚洲欧美午夜福利视频| 一区二区三区四区四虎| 黄片大全在线免费视频观看| 精品伊人久久大香线蕉| 日本电影在线看一区二区| 最新国产情侣夫妻激情| 少妇人妻精品一区二区三| 久久99久久精品视频国产| 精品少妇熟女av免费久久| 中文字幕一区二区三区久久| 一区二区精品福利视频| 丰满少妇被激烈的插进去| av天堂午夜精品蜜臀| 日韩不卡的一区免费视频| 亚洲国产精品一区性色| 日韩成人中文字幕在线视频| 日韩精品国产一区二区在线观看| 高清免费国产日日操夜夜草| 91蜜臀视频在线播放|