API 23及更高版本的Android权限

时间:2017-01-06 09:00:10

标签: android-manifest android-permissions nativescript

到目前为止,我一直在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文件中添加权限,或者只是动态处理它,或者我是否必须同时处理它们。

-Thanks

4 个答案:

答案 0 :(得分:6)

你需要做两件事。你必须在menifest中添加它并管理它。

答案 1 :(得分:3)

您可以放松生活并使用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

中实施的完整示例

答案 2 :(得分:1)

如果你有时间,有两种类型的许可。

运行时会询问危险。

For more details read here.

答案 3 :(得分:0)

从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();
        }
    }
}
相关问题