# 如何解决使用getBundleInfoForSelf接口获取appinfo中permissions信息为空的问题

#### 问题现象

在开发应用时，需要获取应用包申请权限信息，系统提供了bundleManager.getBundleInfoForSelf接口去获取应用包权限信息，但接口返回后获取的appinfo信息中permissions为空值，是什么原因？

```
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;
bundleManager.getBundleInfoForSelf(this.bundleFlags).then((data) => {
  let permissions = JSON.stringify(data.reqPermissionDetails);
  hilog.info(0x0000, 'test', `permissions: ${permissions}`);
})
```

#### 背景知识

应用包信息，可以通过bundleManager.getBundleInfoForSelf获取自身的应用包信息，其中参数BundleFlag指定所返回的BundleInfo中所包含的信息。

#### 问题定位

1.  调用bundleManager.getBundleInfoForSelf接口获取应用包信息需要传入bundleFlags参数，根据传入的bundleFlags参数不同，获取的appinfo信息不同，检查bundleFlags参数是否设置正确。
2.  bundleFlags参数设置可以参考BundleFlag。
3.  获取应用包申请权限信息需要添加包信息标志GET\_BUNDLE\_INFO\_WITH\_REQUESTED\_PERMISSION，未添加此标志值则无法获取应用包申请权限信息。

#### 分析结论

由于未添加包信息标志GET\_BUNDLE\_INFO\_WITH\_REQUESTED\_PERMISSION，导致无法获取包申请权限信息。

#### 修改建议

添加包信息标志GET\_BUNDLE\_INFO\_WITH\_REQUESTED\_PERMISSION，以获取包申请权限信息。

```
import { bundleManager } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct GetBundleInfo {
  getInfo() {
    let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION |
    bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION;
    bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {
      let permissions = JSON.stringify(data.reqPermissionDetails);
      hilog.info(0x0000, 'TAG', 'permissions:' + permissions);
    }).catch((err: BusinessError) => {
      hilog.error(0x0000, 'TAG', err.message);
    });
  }

  build() {
    Column() {
      Button('点击获取包申请权限信息')
        .fontSize(30)
        .onClick(() => {
          this.getInfo();
        });
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center);
  }
}
```

#### 总结

部分API接口会根据传入的参数不同而返回不同的结果，在使用此类API接口时需要注意传入参数的准确性，从而正确的获取所需要的数据。