Android API 23 岁及以上的权限

Android permissions for API 23 and up

到目前为止,我一直在 AndroidManifest.xml 文件中为应用添加必要的权限,如下所示

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />

正如我在网上看到的那样。对于 API 23 岁及以上的用户,应用程序需要在需要时即时请求权限。

所以我的问题是,我是否仍需要在 AndroidManifest.xml 文件中添加权限,或者只是即时处理它,还是我必须同时执行这两项操作。

-谢谢

这两件事你都需要做。您必须将其添加到清单中并进行管理。

从 Android 6.0(API 级别 23)开始,用户在应用 运行 时向应用授予权限,而不是在安装应用时。这种方法简化了应用程序安装过程,因为用户在安装或更新应用程序时不需要授予权限。使用以下代码检查权限

 private void checkPermission() {
   // give whatever permission you want. for example i am taking--Manifest.permission.READ_PHONE_STATE  

    if ((Build.VERSION.SDK_INT >= 23) &&(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_PHONE_STATE)
            != PackageManager.PERMISSION_GRANTED ) ){

        requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 2);
      onRequestPermissionsResult(int, String[], int[]) overriden method
    }else {
          //write your code here. if permission already granted


    }
}

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == 2) {
        Log.i("resultcode",""+requestCode);
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.i("resultcode",""+requestCode);


        }
        else {
            Toast.makeText(getApplicationContext(),  "Permission Denied", Toast.LENGTH_SHORT).show();
        }
    }
}

如果你有时间,有两种权限。

在运行时询问危险。

For more details read here.

您可以轻松使用 nativescript-permissions 请求权限运行时(代码更少,无需通过本机实现) 您仍然需要在 Androidmanifest.xml.

中请求这些权限

具有 nativescript-ermissions 的运行时权限示例

var permissions = require("nativescript-permissions");

permissions.requestPermission([
    "android.permission.INTERNET",
    "android.permission.READ_EXTERNAL_STORAGE",
    "android.permission.WRITE_EXTERNAL_STORAGE",
    "android.permission.CALL_PHONE",
    "android.permission.SEND_SMS"
], "I need these permissions")
    .then(function (res) {
        console.log("Permissions granted!");
    })
    .catch(function () {
        console.log("No permissions - plan B time!");
    });

AndroidManfiest.xml

的例子
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CALL_PHONE"/> 
<uses-permission android:name="android.permission.SEND_SMS"/>

this app

中实现的完整示例