2012-01-20 191 views
6

我看到了關於通過藍牙發送文件的答案。 (回答於2011年6月13日在5:01)通過藍牙發送多個文件

Intent i = new Intent(Intent.ACTION_SEND); i.setType("image/jpeg"); 
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("/sdcard/file.jpg")); 
startActivity(Intent.createChooser(i, "Send Image")); 

是的!有用。它將打開一個默認的藍牙工具/窗口/對話框來發送文件。但是,請你教我如何發送更多文件?這是我的代碼...

String xFile[3] = { "aa.txt", "bb.txt", "cc.txt" }; 

Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); 

for (int i = 0; i < 3; i ++) { 
    intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(xFile[i]))); 
    startActivity(intent); 
} 

它的工作原理,但它會打開默認的藍牙工具/窗口/對話框3次! @@如果有10個文件,它將打開默認的藍牙工具/窗口/對話框10次!

我可以知道如何打開默認的藍牙工具/窗口/對話框一次,然後發送所有文件?

非常感謝你提前!

回答

1

這是一個相當簡單的練習,但這帶來了成本! SDCard存儲空間。

是的,您需要將多個文件轉儲到SD卡上。

對於每個轉儲到SDCard中的文件,您需要建立一個Uri的數組列表。

ArrayList<Uri> listDumpedFileUris = new ArrayList<Uri>(); 
Uri uriFile = Uri.fromFile(new File(dumpedFilePath)); 
listDumpedFileUris.add(uriFile); 

的關鍵部分是明確地告訴意圖的選擇器必須能夠通過授予讀取權限的方式來閱讀和SD卡傾銷文件,更重要的是,數組列表添加到意圖的額外可分包捆綁。

Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE); 
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, listDumpedFileUris); 
startActivity(Intent.createChooser(intent, "Send these files using...")); 

然後所有選定的文件將通過Android的藍牙運行時工具發送。 順便說一句,您可能需要顯式地指定setType的文件,例如,image/jpeg如:

intent.setType("image/jpeg"); 

的唯一責任是你的一部分,以清理SD卡文件系統的殘餘其是大多數情況下,Android用戶絕對不喜歡!

5

那麼,這可以通過以下方式完成。 讓發送的文件列表由mMultiSelectData表示。

ArrayList<Uri> uris = new ArrayList<Uri>(); 
int length = mMultiSelectData.size(); 
Intent mail_int = new Intent(); 
mail_int.setAction(android.content.Intent.ACTION_SEND_MULTIPLE); 
mail_int.setType("*/*"); 
for(int i = 0; i < length; i++) { 
    File file = new File(mMultiSelectData.get(i)); 
    uris.add(Uri.fromFile(file)); 
} 
mail_int.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); 
mContext.startActivity(mail_int); 

這將打開一個選擇框。選擇Bluetooth,文件列表將被髮送。