我正在製作一個應用程序,我想添加一個功能來通過藍牙發送apk文件。由於apk是受限制的文件類型,所以我使用BluetoothShare.java,因此它不允許通過傳統方法。顯然它在Jellybean上不起作用。我得到一個討厭的安全例外。和這個一樣。 Android bluetooth print stopped working on 4.1Android上的藍牙文件傳輸(甚至是限制類型)
有沒有什麼辦法可以做到這一點,如果可能?
我正在製作一個應用程序,我想添加一個功能來通過藍牙發送apk文件。由於apk是受限制的文件類型,所以我使用BluetoothShare.java,因此它不允許通過傳統方法。顯然它在Jellybean上不起作用。我得到一個討厭的安全例外。和這個一樣。 Android bluetooth print stopped working on 4.1Android上的藍牙文件傳輸(甚至是限制類型)
有沒有什麼辦法可以做到這一點,如果可能?
將.apk重命名爲.zip併發送,然後在手機上將其重命名爲.apk。
我能夠通過將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
)。
下面是如何處理:
以及我八九不離十這樣做,我用ZipOutputStream壓縮檔案,然後將其發送。 – 2013-05-11 05:31:51
你可以給這個'ZipOutputStream'的小樣本嗎? – RoCk 2016-08-31 13:27:11