N1g*_*sky 27 java android bluetooth android-studio
由于我是第一次提问,所以问题可能有点晕,请谅解。另外,请理解语法可能会很奇怪,因为我英语不好并且使用翻译器。
\n我是一个在 Android 工作室中使用 java 制作应用程序的人。
\n尝试使用蓝牙时出现连续错误。错误太多,我可以轻松找到解决方案,但它不适用于我。
\n错误日志
\nProcess: org.techtown.push.bluetoothtest2, PID: 10852\n java.lang.RuntimeException: Unable to start activity ComponentInfo{org.techtown.push.bluetoothtest2/org.techtown.push.bluetoothtest2.MainActivity}: java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for AttributionSource { uid = 10158, packageName = org.techtown.push.bluetoothtest2, attributionTag = null, token = android.os.BinderProxy@f43a396, next = null }: AdapterService getBondedDevices\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)\n at android.os.Handler.dispatchMessage(Handler.java:106)\n at android.os.Looper.loopOnce(Looper.java:201)\n at android.os.Looper.loop(Looper.java:288)\n at android.app.ActivityThread.main(ActivityThread.java:7839)\n at java.lang.reflect.Method.invoke(Native Method)\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\n Caused by: java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for AttributionSource { uid = 10158, packageName = org.techtown.push.bluetoothtest2, attributionTag = null, token = android.os.BinderProxy@f43a396, next = null }: AdapterService getBondedDevices\n at android.os.Parcel.createExceptionOrNull(Parcel.java:2425)\n at android.os.Parcel.createException(Parcel.java:2409)\n at android.os.Parcel.readException(Parcel.java:2392)\n at android.os.Parcel.readException(Parcel.java:2334)\n at android.bluetooth.IBluetooth$Stub$Proxy.getBondedDevices(IBluetooth.java:3077)\n at android.bluetooth.BluetoothAdapter.getBondedDevices(BluetoothAdapter.java:2491)\n at org.techtown.push.bluetoothtest2.MainActivity.showPairedDevicesListDialog(MainActivity.java:300)\n at org.techtown.push.bluetoothtest2.MainActivity.onCreate(MainActivity.java:80)\n at android.app.Activity.performCreate(Activity.java:8051)\n at android.app.Activity.performCreate(Activity.java:8031)\n at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)\xc2\xa0\n at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)\xc2\xa0\n at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)\xc2\xa0\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)\xc2\xa0\n at android.os.Handler.dispatchMessage(Handler.java:106)\xc2\xa0\n at android.os.Looper.loopOnce(Looper.java:201)\xc2\xa0\n at android.os.Looper.loop(Looper.java:288)\xc2\xa0\n at android.app.ActivityThread.main(ActivityThread.java:7839)\xc2\xa0\n at java.lang.reflect.Method.invoke(Native Method)\xc2\xa0\n at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)\xc2\xa0\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n我认为中间这句话就是错误的原因。
\nCaused by: java.lang.SecurityException: Need android.permission.BLUETOOTH_CONNECT permission for AttributionSource { uid = 10158, packageName = org.techtown.push.bluetoothtest2, attributionTag = null, token = android.os.BinderProxy@f43a396, next = null }: AdapterService getBondedDevices\n
Run Code Online (Sandbox Code Playgroud)\n但我已经应用了该问题的解决方案。这是我的 Manifest.xml。
\n<?xml version="1.0" encoding="utf-8"?>\n<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n package="org.techtown.push.bluetoothtest2">\n\n <uses-permission android:name="android.permission.BLUETOOTH" />\n <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />\n <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />\n <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />\n <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />\n <uses-feature android:name="android.hardware.bluetooth" android:required="false"/>\n <uses-feature android:name="android.hardware.bluetooth_le" android:required="false"/>\n\n <application\n android:allowBackup="true"\n android:icon="@mipmap/ic_launcher"\n android:label="@string/app_name"\n android:roundIcon="@mipmap/ic_launcher_round"\n android:supportsRtl="true"\n android:theme="@style/Theme.Bluetoothtest2">\n <activity\n android:name=".MainActivity"\n android:exported="true">\n <intent-filter>\n <action android:name="android.intent.action.MAIN" />\n\n <category android:name="android.intent.category.LAUNCHER" />\n </intent-filter>\n </activity>\n </application>\n\n</manifest>\n
Run Code Online (Sandbox Code Playgroud)\n我应用它是因为我发现我需要“android.permission.BLUETOOTH_CONNECT 权限”。然而,错误仍然不断发生。
\n我误解了什么吗?或者我在mainactivty.java中犯了错误?
\n供您参考,我在做项目时是这样做的。
\n\n\n最小 sdk:API 16:Android 4.1(果冻豆)
\n
如果您写下的文件没有问题,请告诉我再次检查 Java 代码。\n谢谢。
\nCla*_*MBE 15
您应该在 Manifest 和 Activity.java 中声明 BLUETOOTH_SCAN 和权限
例如:
<uses-permission android:name="android.permission.BLUETOOTH"
android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
android:maxSdkVersion="30" />
<!-- Needed only if your app looks for Bluetooth devices. -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
tools:ignore="ProtectedPermissions" />
Run Code Online (Sandbox Code Playgroud)
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_PRIVILEGED
};
private static String[] PERMISSIONS_LOCATION = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.BLUETOOTH_PRIVILEGED
};
Run Code Online (Sandbox Code Playgroud)
和
private void checkPermissions(){
int permission1 = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int permission2 = ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN);
if (permission1 != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
this,
PERMISSIONS_STORAGE,
1
);
} else if (permission2 != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(
this,
PERMISSIONS_LOCATION,
1
);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55630 次 |
最近记录: |