2013-04-29 156 views
3

我正在製作一個應用程序,我想添加一個功能來通過藍牙發送apk文件。由於apk是受限制的文件類型,所以我使用BluetoothShare.java,因此它不允許通過傳統方法。顯然它在Jellybean上不起作用。我得到一個討厭的安全例外。和這個一樣。 Android bluetooth print stopped working on 4.1Android上的藍牙文件傳輸(甚至是限制類型)

有沒有什麼辦法可以做到這一點,如果可能?

回答

3

將.apk重命名爲.zip併發送,然後在手機上將其重命名爲.apk。

+0

以及我八九不離十這樣做,我用ZipOutputStream壓縮檔案,然後將其發送。 – 2013-05-11 05:31:51

+0

你可以給這個'ZipOutputStream'的小樣本嗎? – RoCk 2016-08-31 13:27:11

3

我能夠通過將Intent中的MIME類型更改爲application/zip來獲得運行4.4.2的股票Nexus 7以發送APK。但是這仍然沒有改變接收APK的區塊。但是由於許多/大多數ROM會刪除該塊,因此能夠從庫存ROM中發送APK仍然很有用。

PackageManager pm = getPackageManager(); 
ApplicationInfo appInfo; 
try { 
    appInfo = pm.getApplicationInfo("org.fdroid.fdroid", 
      PackageManager.GET_META_DATA); 
    Intent sendBt = new Intent(Intent.ACTION_SEND); 
    // NOT THIS! sendBt.setType("application/vnd.android.package-archive"); 
    sendBt.setType("application/zip"); 
    sendBt.putExtra(Intent.EXTRA_STREAM, 
      Uri.parse("file://" + appInfo.publicSourceDir)); 
    sendBt.setClassName("com.android.bluetooth", 
      "com.android.bluetooth.opp.BluetoothOppLauncherActivity"); 
    startActivity(sendBt); 
} catch (NameNotFoundException e1) { 
    e1.printStackTrace(); 
} 

這是因爲它僅指定一個藍牙Activity,我在我的兩個設備(com.android.bluetooth.opp.BluetoothOppLauncherActivity)看到一個簡單的例子。不幸的是,活動並不總是調用它(例如,com.broadcom.bt.app.opp.OppLauncherActivity),甚至包名稱也可能不同(例如,com.mediatek.bluetooth)。

下面是如何處理: