HarmonyOS 鸿蒙Next 若无位置服务权限,跳转至应用权限设置页面

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 应用里拉取权限开启Demo需求
1、应用权限检查:若无位置服务权限,跳转至应用权限设置页面
2、位置服务状态检查:若手机未开启位置服务,跳转至位置服务开启页面

应用里拉取权限开启,想要一个demo 1、应用权限如果没有位置服务权限,想要跳转到应用的权限页面2、手机没有开启位置服务,想要跳转到位置服务开启页面 

2 回复

module.json5加权限

{
  "name" : "ohos.permission.CAMERA",
"reason": "$string:app_name",
"usedScene": {
  "abilities": [
  "EntryAbility"
  ],
  "when":"inuse"
}
}


import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import abilityAccessCtrl, { Context, PermissionRequestResult } from
  '@ohos.abilityAccessCtrl';
// 拉起应用权限
function startSettingsAbility(context: common.UIAbilityContext): void {
  let want: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    // 根据”设置”应用配置的界面信息,选择不同的uri
    uri: 'application_info_entry',
    // 拉起方应用包名
    parameters: {
      pushParams: context.abilityInfo.bundleName
      // pushParams: "com.example.mytest03" // 这个可以!!!!!
      // pushParams: {
      // bundleName: "com.example.mytest03" // 不不不不不不行!!!
      // // bundleName: context.abilityInfo.bundleName
      // }
    }
  };
  context.startAbility(want).then(() => {
    console.info('Start settings ability successfully.');
  }).catch((err: BusinessError) => {
    console.error(Failed to startAbility. Code: ${err.code}, message: ${err.message});
  });
}
// 拉起"设置"应用的通知管理界面
function startNotification(context: common.UIAbilityContext): void {
  let want: Want = {
    bundleName: 'com.huawei.hmos.settings',
    abilityName: 'com.huawei.hmos.settings.MainAbility',
    // 根据”设置”应用配置的界面信息,选择不同的uri
    // uri: 'application_info_entry',
    uri: 'systemui_notification_settings',
    // 拉起方应用包名
    parameters: {
      // pushParams: context.abilityInfo.bundleName // 不不不不不不行!!!
      // pushParams: "com.example.mytest03"
      pushParams: {
        //bundleName:"com.example.mytest03" // 这个可以!!!!!
        bundleName:context.abilityInfo.bundleName
      }
    }
  };
  context.startAbility(want).then(() => {
    console.info('Start settings ability successfully.');
  }).catch((err: BusinessError) => {
    console.error(Failed to startAbility. Code: ${err.code}, message: ${err.message});
  });
}


@Entry
@Component
struct StartSettingsAbilityView {
  @State message: string = '拉起应用权限';
  @State notification: string = '拉起通知管理';
  @State str: string = '相机授权';
  getCameraPermission(): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    let context: Context = getContext(this) as common.UIAbilityContext;
    atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'],
      (err: BusinessError, data: PermissionRequestResult) => {
        if (err) {
          console.error(requestPermissionsFromUser fail, err->${JSON.stringify(err)});
        } else {
          console.info('data:' + JSON.stringify(data));
          console.info('data permissions:' + data.permissions);
          console.info('data authResults:' + data.authResults);
          console.info('data dialogShownResults:' + data.dialogShownResults);
        }
      });
  }
  build() {
    Row() {
      Column() {
        Button(this.str)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            this.getCameraPermission()
          })
        Button(this.message)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            const context: common.UIAbilityContext = getContext(this) as
            common.UIAbilityContext;
            startSettingsAbility(context);
          })
        Button(this.notification)
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            const context: common.UIAbilityContext = getContext(this) as
            common.UIAbilityContext;
            startNotification(context);
          })


        Button("位置服务").onClick(()=>{
          let context = getContext(this) as common.UIAbilityContext;
          let want: Want = {
            bundleName: 'com.huawei.hmos.settings',
            abilityName: 'com.huawei.hmos.settings.MainAbility',
            uri: "location_manager_settings",//消息通知传uri:systemui_notification_settings, 蓝牙传uri:bluetooth_entry, Wi-Fi传uri:wifi_entry,定位权限传uri:location_manager_settings
            parameters: {
              pushParams: {
                bundleName:""
              } // 应用包名
            }
          };
          console.log("want",want)
          context.startAbility(want)
        }).margin(10)


      }
      .justifyContent(FlexAlign.SpaceAround)
      .width('100%')
      .height('50%')
    }
    .height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next 若无位置服务权限,跳转至应用权限设置页面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next应用中,针对拉取权限开启Demo需求,可以按以下方式实现:

1、应用权限检查:

在代码中检查应用是否已获得位置服务权限。若未获得,则通过系统接口获取跳转到应用权限设置页面的Intent,并启动该Intent,引导用户手动开启权限。

示例代码(伪代码):

if (!hasLocationPermission()) {
    Intent intent = new Intent();
    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    Uri uri = Uri.fromParts("package", getPackageName(), null);
    intent.setData(uri);
    startActivity(intent);
}

2、位置服务状态检查:

在代码中检查手机位置服务是否已开启。若未开启,则通过系统接口获取跳转到位置服务开启页面的Intent,并启动该Intent,引导用户手动开启位置服务。

示例代码(伪代码):

if (!isLocationServiceEnabled()) {
    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
    startActivity(intent);
}

注意,上述代码中的方法hasLocationPermission()isLocationServiceEnabled()需根据HarmonyOS API文档实现,用于检查权限和位置服务状态。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部