How to run Location Request permission from the activity that manipulated from the activity class extends ActivityGroup

302 views Asked by At
    if (ContextCompat.checkSelfPermission(TabHostActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
            {
                ActivityCompat.requestPermissions(TabHostActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
            }
            else {
                ActivityCompat.requestPermissions(TabHostActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
            }

This is the code snippets,i want to place this code on that activity class that manipulated from Class that extends ActivityGroup.

2

There are 2 answers

1
Md Mobinur Rahman On

Create a method like below and call it when you want. Don't forget to add your permission in manifest file too.

public boolean haveLocationPermission() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
            return false;
        }
    }
    else {
        return true;
    }
}
0
Galeen On

I was dealing with simillar legacy project, where the client didn't want to refactor :(

Here is how I request the permissin, where the activity is ActivityGroup :

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

In my ActivityGroup :

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    Activity currentActivity = getCurrentActivity();
    if(currentActivity!=null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
            currentActivity.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }else{
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

You better change your tab activities to extend from AppCompatActivity and override onRequestPermissionsResult method in them so you will get the result there. In my case I had to pass the result to the top fragment in the tab Activity

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if(fragments!=null && fragments.size()>0){
        fragments.get(fragments.size()-1).onRequestPermissionsResult(requestCode, permissions, grantResults);
    }else{
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

And in my Manifest :

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    tools:remove="android:maxSdkVersion"/>

I hope you will fix it!