【问题标题】:Multiple Permissions多个权限
【发布时间】:2016-11-18 13:16:42
【问题描述】:

我有一个java类,代码如下。

public class PermisssionAction {

    public static void requestPermission(Activity activity, String permission) {
        if (ContextCompat.checkSelfPermission(activity, permission)
                != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(activity, new String[]{permission}, 0);
        }
    }

}

现在我在 mainactivity 中调用了它的方法来获取应用程序的权限,如下所示。

public class MainActivity extends AppCompatActivity {
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);

        PermisssionAction.requestPermission(this, Manifest.permission.READ_PHONE_STATE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            PermisssionAction.requestPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
        }
        PermisssionAction.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_CONTACTS);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
        PermisssionAction.requestPermission(this, Manifest.permission.READ_SMS);
        PermisssionAction.requestPermission(this, Manifest.permission.INTERNET);
        PermisssionAction.requestPermission(this, Manifest.permission.BLUETOOTH);
        PermisssionAction.requestPermission(this, Manifest.permission.ACCESS_WIFI_STATE);
        PermisssionAction.requestPermission(this, Manifest.permission.SEND_SMS);



        Intent startupintent = new Intent(MainActivity.this, StartupActivity.class);
        startActivity(startupintent);
        finish();


    }
}

现在我无法理解为什么它在真正的移动设备上运行应用程序时只请求一个权限,而在模拟器上一次请求所有权限。 还假设应用程序第一次获得了位置权限,当你再次打开应用程序时,它会在真实设备上询问另一个待处理的权限,依此类推。你能指导一下吗?

【问题讨论】:

    标签: java android permissions


    【解决方案1】:

    首先,仅将requestPermissions() 用于dangerous 权限。例如,INTERNET 没有 protectionLeveldangerous

    其次,调用requestPermissions()一次,使用您请求的所有权限的String[]。就目前而言,您多次调用requestPermissions(),每个请求只有一个权限。

    【讨论】:

    • 但如果您仔细查看该方法,我也会在请求之前检查权限。唯一不同的是,我是一一询问,而不是数组。
    【解决方案2】:
    1. 有一个权限组。它将在用户界面中请求权限。参考:https://developer.android.com/guide/topics/security/permissions.html
    2. 某些 gradle 版本在 Android 手机中自动允许所有权限。 (带有 6.0+ 设备的旧 Gradle 版本)
    3. 用户轻松许可,以便更好地理解和用户。否则在本机代码中,您需要检查所有权限是否已检查。并在权限接受时提供回调。搜索 Android 的 Easypermission。它在 git 中可用。

    顺便在现有代码中将“(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)”更改为 Marshmallow。其余代码请参考:https://developer.android.com/training/permissions/requesting.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 2020-07-02
      相关资源
      最近更新 更多