片段中的请求权限

Posted

技术标签:

【中文标题】片段中的请求权限【英文标题】:requestPermissions in a fragment 【发布时间】:2018-05-30 12:01:30 【问题描述】:

我添加了 setHasOptionsMenu(true);在 onCreateView 中。我想调用 onRequestPermissionsResult 但 onOptionsItemSelected 有问题。 这是一个片段,如果我使用 v4.fragment,它会产生不同的问题。 我将使用 import android.app.Fragment;但 requestPermissions 想要 --Call 需要 API 级别 23(当前最低为 16):-- 我尝试了一些解决方案。我想解决api级别问题的唯一方法。我该如何解决?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)

    menu.add("").setIcon(android.R.drawable.ic_menu_call).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);


@Override
public boolean onOptionsItemSelected(MenuItem item)

    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)
    
        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_CONTACTS))
        
        
        else
        
            ActivityCompat.requestPermissions(getActivity(), new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            MenuFragment.this.requestPermissions( new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            requestPermissions( new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
        
    
    return super.onOptionsItemSelected(item);


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

    Toast.makeText(getActivity(), "Here", Toast.LENGTH_LONG).show();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    //AlertDialog.Builder builder = new AlertDialog.Builder(this);
   .
   .
   .

【问题讨论】:

【参考方案1】:

我只添加了 targetapi 并且它有效。另外,我在这个片段中使用了 requestPermissions。

@TargetApi(Build.VERSION_CODES.M)
@Override
public boolean onOptionsItemSelected(MenuItem item)

    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)
    
        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_CONTACTS))
        
        
        else
        
            //ActivityCompat.requestPermissions(getActivity(), new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            //MenuFragment.requestPermissions( new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            requestPermissions( new String[]Manifest.permission.CALL_PHONE, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
        
    
    return super.onOptionsItemSelected(item);

【讨论】:

【参考方案2】:

当您在 Fragment 中使用 Runtime 权限时,使用 requestPermission() 而不是 AppCompact.requestpermission()。

请查看以下链接:

How to check permission in fragment

希望对您有所帮助,如果您这样做了,请点赞并关闭此问题。

【讨论】:

以上是关于片段中的请求权限的主要内容,如果未能解决你的问题,请参考以下文章

从片段内请求权限后应用程序崩溃

如何使用 TabLayout 在 ViewPager 中的 Google 地图片段中获取当前位置

使用 rxJava 和改造多次调用另一个请求中的请求

Android如何根据选择器意图中的用户操作请求权限

如何从 Android Marshmallow 中的服务请求权限

gitlab 权限说明