Android 请求片段中的权限

Android 请求片段中的权限,android,android-fragments,permissions,android-permissions,menuitem,Android,Android Fragments,Permissions,Android Permissions,Menuitem,我添加了SetHasOptions菜单(true);在onCreateView中。我想调用onRequestPermissionsResult,但OnOptions ItemSelected中存在问题。 这是一个片段,如果我使用v4.fragment,它会产生不同的问题。 我将使用import android.app.Fragment;但requestPermissions want——调用需要API级别23(当前最小值为16):——我尝试了一些解决方案。我想这是解决api级问题的唯一方法。我怎

我添加了SetHasOptions菜单(true);在onCreateView中。我想调用onRequestPermissionsResult,但OnOptions ItemSelected中存在问题。 这是一个片段,如果我使用v4.fragment,它会产生不同的问题。 我将使用import android.app.Fragment;但requestPermissions want——调用需要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);
   .
   .
   .

当您在片段中使用运行时权限时,使用的是requestPermission()而不是AppCompact.requestPermission()

请查看以下链接:


希望有此帮助,如果您这样做了,请投票并结束此问题。

当您在片段中使用运行时权限时,当时使用的是requestPermission()而不是AppCompact.requestPermission()

请查看以下链接:


希望这对您有所帮助,如果您这样做了,请对其进行投票并结束此问题。

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

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