requestPermissions在一个片段中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requestPermissions在一个片段中相关的知识,希望对你有一定的参考价值。

我添加了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);
   .
   .
   .
答案

我只添加了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);
}
另一答案

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

请查看以下链接:

How to check permission in fragment

希望这有帮助,如果你这样做,请提升它并关闭这个问题。

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

Android Java无法在片段中显示requestPermission

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

片段中的请求权限不显示对话框

Activity.requestPermissions 与 ActivityCompat.requestPermissions

如何在调用 requestPermissions 之前知道用户检查“不再询问”

Geolocation.requestPermission()只能运行一次