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.