-1

Here is the MainActivity code.From the onCreate() method of MainActivity permissionCheck() method of MultiplePermission class is called.

    public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(Build.VERSION.SDK_INT >= 23){
            MultiplePermission multiplePermission = new MultiplePermission();
            if(multiplePermission.permissionCheck()){
                Toast.makeText(this, "All permission granted", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

MultiplePermission class code is following. The permissionCheck() method of this class check the android permission at runtime.If any permission is denied then the whole application is closed.

public class MultiplePermission extends AppCompatActivity {
    private int PERMISSION_ALL = 1;
    private String[] PERMISSIONS = {
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.READ_PHONE_STATE,
            Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_EXTERNAL_STORAGE,
            Manifest.permission.PROCESS_OUTGOING_CALLS
    };

    public boolean permissionCheck() {
        if (!hasPermissions(this, PERMISSIONS)) {

            ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
        }
        return true;
    }

    private boolean hasPermissions(Context context,String[] permissions) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission((Activity)context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        for(int result : grantResults){
            if(result != PackageManager.PERMISSION_GRANTED)
                System.exit(0);
        }
        return;
    }
}

And here is the error message.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
                                                                                            at android.content.ContextWrapper.checkPermission(ContextWrapper.java:669)
                                                                                            at android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
                                                                                            at testapp.android.vogella.com.permissiontest.MultiplePermission.hasPermissions(MultiplePermission.java:40)
                                                                                            at testapp.android.vogella.com.permissiontest.MultiplePermission.permissionCheck(MultiplePermission.java:29)
                                                                                            at testapp.android.vogella.com.permissiontest.MainActivity.onCreate(MainActivity.java:16)
                                                                                            at android.app.Activity.performCreate(Activity.java:6664)
                                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
                                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                                            at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                            at android.os.Looper.loop(Looper.java:154) 
                                                                                            at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
SHB
  • 585
  • 6
  • 14

1 Answers1

1

You should never start an Activity with new Object(), it will not get the context reference.

MultiplePermission should not be an Activity and in the method you need context, get it by parameter:

public boolean permissionCheck(Activity activity) {
    if (!hasPermissions(this, PERMISSIONS)) {

        ActivityCompat.requestPermissions(activity, PERMISSIONS, PERMISSION_ALL);
    }
    return true;
}
Eduardo Herzer
  • 2,033
  • 21
  • 24