sam sam - 1 month ago 16
Android Question

App is not moving to next activity while all the permission is granted

I am properly allowing and denying permission and app is running properly first time but when all permission is granted and next time when user launches the app, it shows only splash screen and become stable and do not move to next activity , and it also not give any error , what i am trying is below.

private static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
splashIcon = (ImageView) findViewById(R.id.splashIcon);
new Thread(new Runnable()
{
@Override
public void run()
{
Animation anim1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.bounce);
splashIcon.setAnimation(anim1);
anim1.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
checkMultiplePermissions();
}else{
startActivity(new Intent(Splash.this,UserGuideActivity.class));
finish();
}
}
@Override
public void onAnimationRepeat(Animation animation)
{
}
});
}
}).start();
}
private void checkMultiplePermissions() {
if (Build.VERSION.SDK_INT >= 23) {
List<String> permissionsNeeded = new ArrayList<String>();
List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, android.Manifest.permission.ACCESS_FINE_LOCATION))
{
permissionsNeeded.add("GPS");
}
if (!addPermission(permissionsList, android.Manifest.permission.READ_EXTERNAL_STORAGE))
{
permissionsNeeded.add("Read Storage");
}
if(!addPermission(permissionsList, Manifest.permission.READ_SMS))
{
permissionsNeeded.add("Read Sms");
}
if(!addPermission(permissionsList, Manifest.permission.READ_CONTACTS))
{
permissionsNeeded.add("Read Contacts");
}
if(!addPermission(permissionsList, Manifest.permission.READ_CALL_LOG))
{
permissionsNeeded.add("Read Calllogs");
}

if (permissionsList.size() > 0)
{
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
}
}



private boolean addPermission(List<String> permissionsList, String permission) {
if (Build.VERSION.SDK_INT >= 23)

if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);

// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(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<String, Integer>();
// Initial
perms.put(android.Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED);
perms.put(android.Manifest.permission.READ_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_SMS,PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_CONTACTS,PackageManager.PERMISSION_GRANTED);
perms.put(Manifest.permission.READ_CALL_LOG,PackageManager.PERMISSION_GRANTED);

// Fill with results
for (int i = 0; i < permissions.length; i++)
perms.put(permissions[i], grantResults[i]);
if (perms.get(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
&& perms.get(android.Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_SMS)==PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_CONTACTS)==PackageManager.PERMISSION_GRANTED
&& perms.get(Manifest.permission.READ_CALL_LOG)==PackageManager.PERMISSION_GRANTED)
{
// All Permissions Granted
startActivity(new Intent(this,UserGuideActivity.class));
finish();
return;
} else {
// Permission Denied
if (Build.VERSION.SDK_INT >= 23) {
Toast.makeText(getApplicationContext(), "Please permit all the permissions", Toast.LENGTH_LONG).show();
finish();
}
}
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}

Answer

because if all permissions are granted then this will be false and there is no else case to do anything

    if (permissionsList.size() > 0)
    {
        requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
    }

so it should be like this

    if (permissionsList.size() > 0)
    {
        requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
    }
    else{
          startActivity(new Intent(Splash.this,UserGuideActivity.class));
                        finish();
    }