通過藍芽接收檔案,從曆史傳輸記錄開啟,無法自動選擇合適的應用程式
但是從file manager開啟這個新接收的檔案,是可以選擇對應的應用程式(比如video player開啟.3gp、.mp4檔案)
曆史傳輸記錄開啟download的檔案,是通過接收檔案時對方傳過來的mime type來選擇適合的APP開啟該檔案
如果出現提示“未支援格式的檔案”,或者使用了錯誤的APP來開啟該檔案
原因在於發送方傳送檔案時填的mime type存在問題
如下的log是mtk接收方的log,請注意黃色字型的tag
Bluetooth.OPP(299): opps newTask: [total=801728][result=null][_id=1][peer_addr=00:23:AF:D5:F6:8B][done=0][name=Eternal Blue.mp3][data=/mnt/sdcard/Received File/Eternal Blue.mp3][state=0][mime=audio/mpeg][type=11][uri=null][peer_name=XT502]
mime type是對檔案類型的一個描述,有其相關的標準來關聯不同類型檔案
mime type有誤需要先排查發送方問題
1. 發送方為非mtk手機,需確認發送給不同平台的對比手機,是否都能正常開啟該檔案
2. 發送方為mtk手機,通過第三方安裝APK(如第三方gallery發圖片)傳送檔案,需先排查第三方安裝APK的問題,傳出來的intent所帶的mime type有誤
3. 發送方為mtk手機,通過內建APK發檔案,請提交eservice由mtk處理
需要明確一點,某些對比的接收方沒有此問題,是因為某些廠商做法是接收完檔案後,會重新檢測該檔案並產生新的mimetype
如果只有某些特定檔案才有問題,可參考此方法從mtk接收方做mimetype轉換作為規避方法
\xintong\packages\apps\Bluetooth\profiles\opp\src\com\mediatek\bluetooth\opp\adp\OppManager.java 複製代碼 代碼如下:oppsStartPushActivity {
...
//add begin
//根據無法識別的mime type來轉換
if( mimeType.equals("無法識別的mimetype");
this.mOppsTask.setMimeType("正確的mimetype");
/*
根據尾碼名來轉換對應的mimetype
String extname = objectName.substring(objname.lastIndexOf("."));
if(extname.equals(".xxx"))
this.mOppsTask.setMimeType("正確的mimetype");
*/
else
//add end
this.mOppsTask.setMimeType(mimeType);