【问题标题】:Request code for permissions in androidandroid中的权限请求代码
【发布时间】:2017-06-01 14:09:53
【问题描述】:

请帮助我获取权限“WRITE_EXTERNAL_STORAGE”和“WRITE_SETTINGS”的请求代码。 也请告诉我请求代码的来源。

【问题讨论】:

标签: android performance android-layout android-studio android-fragments


【解决方案1】:

一个简单的演示:

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
        != PackageManager.PERMISSION_GRANTED) {

      ActivityCompat.requestPermissions(thisActivity,
              new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
              YourRequestCode);
}

您可以设置YourRequestCode 任何值,例如1

【讨论】:

  • 我对 requestcode 的概念有误。谢谢我这个代码完成了我的问题。谢谢大家..
【解决方案2】:

适用于 XAMARIN 表单
在 MainActivity 中注入这段代码

        protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;
        string[] perm = new string[] { Manifest.Permission.WriteSettings, Manifest.Permission.WriteExternalStorage };
        RequestPermissions(perm, 1);
        Permission WESCheck = ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteExternalStorage);
        Permission WSCheck = ContextCompat.CheckSelfPermission(Android.App.Application.Context, Manifest.Permission.WriteSettings);

        base.OnCreate(savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }

【讨论】:

    【解决方案3】:

    You can pass any integer value you want as the request code.
    请求代码的重点是可以在onRequestPermissionsResult处理程序中区分不同的权限请求。文档示例如下:

    @Override
    public void onRequestPermissionsResult(int requestCode,
            String permissions[], int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // permission was granted, yay! Do the
                    // contacts-related task you need to do.
                } else {
                    // permission denied, boo! Disable the
                    // functionality that depends on this permission.
                }
                return;
            }
    
            // other 'case' lines to check for other
            // permissions this app might request.
        }
    }
    

    这里,MY_PERMISSIONS_REQUEST_READ_CONTACTS 是一些包含请求代码的常量变量。请求行可能如下所示:

    int MY_PERMISSIONS_REQUEST_READ_CONTACTS = 1337;    
    ActivityCompat.requestPermissions(context,
                                       new String[]{Manifest.permission.READ_CONTACTS}, 
                                       MY_PERMISSIONS_REQUEST_READ_CONTACTS );
    

    【讨论】:

    • 请求代码的目的是什么,我知道它是特定于应用程序的,并且看到你定义了它,但我不知道它的用途或它有什么帮助。跨度>
    • @Goku 在文档中没有很好地解释,他们只提到you can also choose to not manage the request code yourself。但我想用例是当你想重用同一个类来处理这些请求结果,但不同的请求不同。 IE。如果您在我的示例中的switch 中有更多案例
    【解决方案4】:
    public void getPermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_CONSTANT);
        } else {
            uiBind();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_CONSTANT:
    
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    getPermission();
                }
                break;
        }
    }
    

    【讨论】:

    • 请添加一些解释。
    猜你喜欢
    • 2016-09-12
    • 2016-08-07
    • 2023-03-06
    • 2017-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多