0

i'am trying to set run time permission for MarshMallow+ devices. When i do it asks for permission but when i click allow the app stops unfortunately. If i open the app again it works fine. My code for run time permission:

int CurrentVersion = Build.VERSION.SDK_INT;
    if (CurrentVersion >= android.os.Build.VERSION_CODES.M) {
        if (!checkIfAlreadyhavePermission())
        {
            requestForSpecificPermission();
        }
    }

}
private boolean checkIfAlreadyhavePermission() {
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.GET_ACCOUNTS);
    if (result == PackageManager.PERMISSION_GRANTED) {
        return true;
    } else {
        return false;
    }
}
private void requestForSpecificPermission() {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    if (requestCode == 1) {
        switch (requestCode) {
            case 1: {

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

                    createall();
                } else {

                    Toast.makeText(MainActivity.this, "Permission denied to read your External storage", Toast.LENGTH_SHORT).show();
                }
                return;
            }
        }
    }
}

createall:

 public void createall()
{

    String mediaLocation = "/VApp";
    String myfolder= Environment.getExternalStorageDirectory() + mediaLocation;
    File mediaDir = new File(myfolder);

    if(!mediaDir.exists())
    {
        mediaDir.mkdir();
    }

    Toolbar toolBar =(Toolbar)findViewById(R.id.toolBar);
    setSupportActionBar(toolBar);
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());


    adapter.addFragment(new RecentActivity(), "Recent");
    adapter.addFragment(new SavedActivity(), "Saved");

    viewPager.setAdapter(adapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
}

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

}

this is my createall method but when i open app again after the app stopped this code works fine.

1 Answers1

0

It is because:

    Toolbar toolBar = (Toolbar) findViewById(R.id.toolBar);
    setSupportActionBar(toolBar);
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());


    adapter.addFragment(new RecentActivity(), "Recent");
    adapter.addFragment(new SavedActivity(), "Saved");

    viewPager.setAdapter(adapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);

the above code is written in onCreate() method

Just cut it and paste it in onPostResume() method like this:

@Override
protected void onPostResume() {
    super.onPostResume();
    Toolbar toolBar = (Toolbar) findViewById(R.id.toolBar);
    setSupportActionBar(toolBar);
    ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());


    adapter.addFragment(new RecentActivity(), "Recent");
    adapter.addFragment(new SavedActivity(), "Saved");

    viewPager.setAdapter(adapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
}