【发布时间】:2023-02-18 12:11:12
【问题描述】:
我很久以前就学会了如何在 Android 中编写代码,并且已经有一段时间没有接触过它了。现在我想用蓝牙模块 (HC-05) 控制电机,并且正在使用 Android Studio 重新学习 Android。呜呜……
显然,他们改变了获取权限的方式,无论出于何种原因,现在它变得超级复杂。我做了一些研究,但我仍然无法让我的手机弹出“此应用程序正在请求这些权限”的弹出窗口。你能帮我解决这个问题吗?这是我请求权限的最基本代码:
“ Android Studio 大黄蜂 | 2021.1.1 补丁 2 Build #AI-211.7628.21.2111.8193401,建于 2022 年 2 月 17 日 运行时版本:11.0.11+9-b60-7590822 amd64 VM:Oracle Corporation 的 OpenJDK 64 位服务器 VM 视窗 10 10.0 GC:G1年轻代,G1老年代 内存:1280M 核心数:12 注册表:external.system.auto.import.disabled=true “
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bluetoothandpermissions">
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BluetoothAndPermissions">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
主活动.java
package com.example.bluetoothandpermissions;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class MainActivity extends AppCompatActivity {
ActivityResultLauncher<String[]> nPermissionResultLauncher;
private boolean isBluetoothPermissionGranted = false;
private boolean isBluetoothAdminPermissionGranted = false;
private boolean isBluetoothConnectPermissionGranted = false;
private boolean isBluetoothScanPermissionGranted = false;
private boolean isBluetoothAdvertisePermissionGranted = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nPermissionResultLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback<Map<String, Boolean>>() {
@Override
public void onActivityResult(Map<String, Boolean> result) {
if(result.get(Manifest.permission.BLUETOOTH) != null){
isBluetoothPermissionGranted = result.get(Manifest.permission.BLUETOOTH);
}
if(result.get(Manifest.permission.BLUETOOTH_ADMIN) != null){
isBluetoothAdminPermissionGranted = result.get(Manifest.permission.BLUETOOTH_ADMIN);
}
if(result.get(Manifest.permission.BLUETOOTH_CONNECT) != null){
isBluetoothConnectPermissionGranted = result.get(Manifest.permission.BLUETOOTH_CONNECT);
}
if(result.get(Manifest.permission.BLUETOOTH_SCAN) != null){
isBluetoothScanPermissionGranted = result.get(Manifest.permission.BLUETOOTH_SCAN);
}
if(result.get(Manifest.permission.BLUETOOTH_ADVERTISE) != null){
isBluetoothAdvertisePermissionGranted = result.get(Manifest.permission.BLUETOOTH_ADVERTISE);
}
}
});
requestPermission();
}
private void requestPermission(){
isBluetoothPermissionGranted = ContextCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH
) == PackageManager.PERMISSION_GRANTED;
isBluetoothAdminPermissionGranted = ContextCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_ADMIN
) == PackageManager.PERMISSION_GRANTED;
isBluetoothConnectPermissionGranted = ContextCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_CONNECT
) == PackageManager.PERMISSION_GRANTED;
isBluetoothScanPermissionGranted = ContextCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_SCAN
) == PackageManager.PERMISSION_GRANTED;
isBluetoothAdvertisePermissionGranted = ContextCompat.checkSelfPermission(
this,
Manifest.permission.BLUETOOTH_ADVERTISE
) == PackageManager.PERMISSION_GRANTED;
List<String> permissionRequest = new ArrayList<String>();
if (!isBluetoothPermissionGranted){
permissionRequest.add(Manifest.permission.BLUETOOTH);
}
if (!isBluetoothAdminPermissionGranted){
permissionRequest.add(Manifest.permission.BLUETOOTH_ADMIN);
}
if (!isBluetoothConnectPermissionGranted){
permissionRequest.add(Manifest.permission.BLUETOOTH_CONNECT);
}
if (!isBluetoothScanPermissionGranted){
permissionRequest.add(Manifest.permission.BLUETOOTH_SCAN);
}
if (!isBluetoothAdvertisePermissionGranted){
permissionRequest.add(Manifest.permission.BLUETOOTH_ADVERTISE);
}
if (!permissionRequest.isEmpty()){
nPermissionResultLauncher.launch(permissionRequest.toArray(new String[0]));
}
}
}
我尝试了我在 youtube 视频上看到的内容 https://www.youtube.com/watch?v=nkayHRT8D_w
看过这个,但它并不是真正的示例代码,所以对我帮助不大[我又笨又懒,所以我需要示例]: https://developer.android.com/training/permissions/requesting
这个网站 https://www.geeksforgeeks.org/android-how-to-request-permissions-in-android-application/
在这里检查其他人有类似的问题 Why does my Android app not request permissions on install?
我想得到这样的东西: 但是我一直都是0权限设置:
【问题讨论】:
标签: android android-permissions android-bluetooth