Created
November 23, 2015 17:50
-
-
Save ivanbruel/2caf5466f518970abbdc to your computer and use it in GitHub Desktop.
A little permissions wrapper for Android Marshmellow with usage example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MainActivity extends Activity { | |
private Permissions mPermissions; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
mPermissions = Permissions.with(this); | |
} | |
@Override | |
public boolean onOptionsItemSelected(MenuItem item) { | |
if (item.getItemId() == R.id.open_camera) { | |
openCamera(); | |
return true; | |
} | |
return super.onOptionsItemSelected(item); | |
} | |
@Override | |
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { | |
mPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults); | |
} | |
private void openCamera() { | |
if (mPermissions.canAccessCamera()) { | |
// Show Camera | |
} else { | |
mPermissions.askCameraPermission(new Permissions.PermissionListener() { | |
@Override | |
public void permissionResult(boolean granted) { | |
if (granted) { | |
openCamera(); | |
} | |
} | |
}); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import android.Manifest; | |
import android.app.Activity; | |
import android.content.Context; | |
import android.content.pm.PackageManager; | |
import android.support.v4.app.ActivityCompat; | |
import android.support.v4.content.ContextCompat; | |
import android.util.SparseArray; | |
import java.util.ArrayList; | |
public class Permissions { | |
private static final int CAMERA_REQUEST_CODE = 1; | |
private static final int LOCATION_REQUEST_CODE = 2; | |
private Activity mActivity; | |
private Context mContext; | |
private SparseArray<PermissionListener> mPermissionListeners; | |
public static Permissions with(Activity activity) { | |
return new Permissions(activity); | |
} | |
public static Permissions with(Context context) { | |
return new Permissions(context); | |
} | |
private Permissions(Activity activity) { | |
mActivity = activity; | |
mContext = activity; | |
mPermissionListeners = new SparseArray<>(); | |
} | |
private Permissions(Context context) { | |
mContext = context; | |
} | |
private boolean hasPermission(String perm) { | |
return ContextCompat.checkSelfPermission(mContext, perm) == PackageManager.PERMISSION_GRANTED; | |
} | |
public boolean canAccessLocation() { | |
return hasPermission(android.Manifest.permission.ACCESS_FINE_LOCATION); | |
} | |
public boolean canAccessCamera() { | |
return hasPermission(android.Manifest.permission.CAMERA); | |
} | |
public void askCameraPermission(PermissionListener permissionListener) { | |
askPermission(Manifest.permission.CAMERA, CAMERA_REQUEST_CODE, permissionListener); | |
} | |
public void askLocationPermission(PermissionListener permissionListener) { | |
askPermission(Manifest.permission.ACCESS_FINE_LOCATION, LOCATION_REQUEST_CODE, permissionListener); | |
} | |
private void askPermission(String permission, int requestCode, PermissionListener permissionListener) { | |
if (mActivity != null) { | |
mPermissionListeners.append(requestCode, permissionListener); | |
ActivityCompat.requestPermissions(mActivity, new String[]{permission}, requestCode); | |
} | |
} | |
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { | |
if (mPermissionListeners != null) { | |
PermissionListener permissionListener = mPermissionListeners.get(requestCode); | |
if (permissionListener != null) { | |
permissionListener.permissionResult(grantResults[0] == PackageManager.PERMISSION_GRANTED); | |
} | |
} | |
} | |
public interface PermissionListener { | |
void permissionResult(boolean granted); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment