0

I added setHasOptionsMenu(true); in onCreateView. I want to call onRequestPermissionsResult but there is a problem in onOptionsItemSelected. This is in a fragment and if I use v4.fragment, it creates different problems. I will use import android.app.Fragment; but requestPermissions want --Call requires API level 23 (current min is 16):-- I tried a few solution. I guess only way to solve api level problem. How can I solve it?

@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);
   .
   .
   .
ozo
  • 101
  • 1
  • 2
  • 13

2 Answers2

2

I only added targetapi and it worked. Also, I used requestPermissions in this fragment.

@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);
}
ozo
  • 101
  • 1
  • 2
  • 13
0

When you use Runtime permission in Fragment at that time used requestPermission() not AppCompact.requestpermission().

Please check below link:

How to check permission in fragment

Hope this help and if you done this please upvote it and closed this question.

Jyubin Patel
  • 1,373
  • 7
  • 17