Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Runtime permissions not working form second time

I was able to build application with run time permission. At splash screen 1st time it shows the splash screen from second time the app struck at the splash screen. This is my code. I followed this link.

https://developer.android.com/training/permissions/requesting.html

i have made it. but only 1 time it runs perfectly from second time it stucks at splash screen.

if (android.os.Build.VERSION.SDK_INT >= 23)
        {
            // Here, thisActivity is the current activity
              if (ContextCompat.checkSelfPermission(SplashScreen.this,
                              Manifest.permission.READ_PHONE_STATE)
                      != PackageManager.PERMISSION_GRANTED) {

                  // Should we show an explanation?
                  if (ActivityCompat.shouldShowRequestPermissionRationale(SplashScreen.this,
                          Manifest.permission.READ_PHONE_STATE)) {

                      // Show an expanation to the user *asynchronously* -- don't block
                      // this thread waiting for the user's response! After the user
                      // sees the explanation, try again to request the permission.

                  } else {

                      // No explanation needed, we can request the permission.

                      ActivityCompat.requestPermissions(SplashScreen.this,
                              new String[]{Manifest.permission.READ_PHONE_STATE},
                              MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);

                      // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                      // app-defined int constant. The callback method gets the
                      // result of the request.
                  }
              }
        }


 @Override
      public void onRequestPermissionsResult(int requestCode,
              String permissions[], int[] grantResults) {

          switch (requestCode) {
              case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
                  // If request is cancelled, the result arrays are empty.
                  if (grantResults.length > 0
                      && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                          Intent i = new Intent(SplashScreen.this, EmtyActivity.class);
                          startActivity(i);

                          // close this activity
                          finish();


                  } else {
                    // Contact permissions have not been granted yet. Request them directly.
                      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE},
                              MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);

                  }
                  return;
              }

              // other 'case' lines to check for other
              // permissions this app might request
          }
      }
like image 965
benarjee bojja Avatar asked Feb 20 '26 08:02

benarjee bojja


1 Answers

You need an else statement to do things if the permission has been already granted:

if (ContextCompat.checkSelfPermission(SplashScreen.this,
                Manifest.permission.READ_PHONE_STATE)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(SplashScreen.this,
            Manifest.permission.READ_PHONE_STATE)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(SplashScreen.this,
                new String[]{Manifest.permission.READ_PHONE_STATE},
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}
else
{
            Intent i = new Intent(SplashScreen.this, EmtyActivity.class);
            startActivity(i);

            // close this activity
            finish();

}
like image 186
Pooya Avatar answered Feb 21 '26 21:02

Pooya