我们有一个将图像打印到蓝牙打印机的应用程序。此应用程序在 Android 4.0 ICS 上运行良好,但当我们将其中一个升级到 Android 4.1 果冻豆时,在 logcat 中打印停止工作:
W/System.err(19319): java.lang.SecurityException: Permission Denial: 从 pid=19319, uid=10106 写入 com.android.bluetooth.opp.BluetoothOppProvider uri content://com.android.bluetooth.opp/btopp需要 android.permission.ACCESS_BLUETOOTH_SHARE 或 grantUriPermission()
问题是我们声明了这个权限,所以这个错误对我们来说毫无意义。这是我们清单中的行
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.turner.itstrategy.LumenboxClient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="11" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_BLUETOOTH_SHARE"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.VIBRATE" />
(stuff removed)
</manifest>
这是我们用来打印的代码。此代码取自 stackoverflow 和其他地方的示例。
ContentValues values = new ContentValues();
String path = Environment.getExternalStorageDirectory().toString();
File imageFile = new File(path, "CurrentLumenboxPrint.jpg");
//build the message to send on BT
values.put(BluetoothShare.URI, Uri.fromFile(imageFile).toString());
values.put(BluetoothShare.MIMETYPE, "image/jpeg");
values.put(BluetoothShare.DESTINATION, device.getAddress());
values.put(BluetoothShare.DIRECTION, BluetoothShare.DIRECTION_OUTBOUND);
Long ts = System.currentTimeMillis();
values.put(BluetoothShare.TIMESTAMP, ts);
// Here is where the exception happens
final Uri contentUri = getApplicationContext().getContentResolver().insert(BluetoothShare.CONTENT_URI, values);
现在我们已经死在水中了..任何建议表示赞赏。