0

What is the easiest/shortest way to assign all permissions to Android app ?

I need this because: We are developing a proprietary app for android plug pc, which will be the only app that runs on the device on foreground. As we are planning for non-interrupting updates on the device I want to assign all permissions on the device during the very first installation itself.

jay
  • 1,982
  • 2
  • 24
  • 54
  • 1
    Request all of them, or make a new permission that grants you all other permissions since you're the vendor. – Shark Jul 07 '16 at 09:20
  • 1
    Possible duplicate of [Android : How to set all uses-permission?](http://stackoverflow.com/questions/7633639/android-how-to-set-all-uses-permission) – Christian Ammann Jul 07 '16 at 09:25
  • @Shark - Can you please explain how can I make a new permission that grants you all other permissions ? – jay Jul 07 '16 at 10:58

2 Answers2

1

It is better to manually give permissions to all in manifest file. The link have all the permissions needed for an android app.

raasesh
  • 161
  • 11
0

In recent time, from Marshmallow version ,android has provided requesting permission at runtime. So as soon as app starts for the first time you can ask for permissions from the user required for your app.So in your activity you can do this :

 @Override
protected void onStart() {
    super.onStart();
    checkPermissionsAtOnce();
}

Then

private void checkPermissionsAtOnce(){

    List<String> permissionsNeeded = new ArrayList<>();

    final List<String> permissionsList = new ArrayList<>();
    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION))
        permissionsNeeded.add(getString(R.string.gps));
    if(!addPermission(permissionsList, Manifest.permission.SEND_SMS))
        permissionsNeeded.add(getString(R.string.send_sms));
    if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE))
        permissionsNeeded.add(getString(R.string.write_external_storage));
    if(!addPermission(permissionsList, Manifest.permission.READ_PHONE_STATE))
        permissionsNeeded.add(getString(R.string.read_phone_state));
    if(!addPermission(permissionsList, Manifest.permission.CAMERA))
        permissionsNeeded.add(getString(R.string.use_camera));

    if (permissionsList.size() > 0) {
        if (permissionsNeeded.size() > 0) {
            String message = getString(R.string.grad_access_to) + permissionsNeeded.get(0);
            for (int i = 1; i < permissionsNeeded.size(); i++)
                message = message + ", " + permissionsNeeded.get(i);
            showMessageOKCancel(message,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            ActivityCompat.requestPermissions(MainActivity.this,permissionsList.toArray(new String[permissionsList.size()]),
                                    REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                        }
                    });
            return;
        }
        ActivityCompat.requestPermissions(MainActivity.this, permissionsList.toArray(new String[permissionsList.size()]),
                REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
        return;
    }

}

private void showMessageOKCancel(String message, DialogInterface.OnClickListener listener){
    new AlertDialog.Builder(MainActivity.this)
            .setMessage(message)
            .setPositiveButton(R.string.ok, listener)
            .setNegativeButton(R.string.cancel, null)
            .create()
            .show();
}


private boolean addPermission(List<String> permissionsList, String permission) {
    if (ContextCompat.checkSelfPermission(MainActivity.this,permission) != PackageManager.PERMISSION_GRANTED) {
        permissionsList.add(permission);
        if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permission))
            return false;
    }
    return true;
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
        {
            Map<String, Integer> perms = new HashMap<>();
            perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.SEND_SMS, PackageManager.PERMISSION_GRANTED);
            perms.put(Manifest.permission.READ_PHONE_STATE, PackageManager.PERMISSION_GRANTED);

            for (int i = 0; i < permissions.length; i++)
                perms.put(permissions[i], grantResults[i]);

            if(perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED){
                permissionPhoneStateGranted = true;
            }

          /*  if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED
                    && perms.get(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED){

            }*/
        }
        break;
        case REQUEST_CODE_ASK_PERMISSIONS_FOR_PHONE_STATE:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Permission Granted
                permissionPhoneStateGranted = true;

            } else {
                // Permission Denied
                permissionPhoneStateGranted = false;
            }
            break;

        default:
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

You can take this sample as a reference and do implement in your application.Hope it helps you..

Riten
  • 2,879
  • 3
  • 24
  • 28