У меня есть активность с тремя фрагментами, первый - это фрагмент карты, а два других - фрагменты recyclerview. Я попытался напрямую запросить разрешение во фрагменте карты, но у него была куча проблем, которые я исправил, добавив проверку разрешения в родительской активности вместо фрагмента карты. Прямо сейчас, если разрешение разрешено, оно переходит к моему местоположению и увеличивает масштаб, а если нет, оно переходит к пользовательскому местоположению. Но в первый раз, когда я устанавливаю приложение, оно загружает фрагменты, как только я его запускаю, и после этого меня спрашивают о моем разрешении.
Это работает, но я хочу, чтобы мои фрагменты загружались только после того, как разрешения были приняты или отклонены пользователем, при первой установке и запуске приложения.
Моя основная деятельность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
tutorialUsed = false;
tutorialPage = 1;
AppBarLayout.LayoutParams params =
(AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
db = new SQLiteHandler(getApplicationContext());
// session manager
session = new SessionManager(getApplicationContext());
if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{ android.Manifest.permission.ACCESS_FINE_LOCATION}, MY_LOCATION_REQUEST_CODE);
}
}
if (!session.isLoggedIn()) {
Intent intent = new Intent(this, LoginActivity.class);
startActivity(intent);
} else {
List<Restaurant> Restaurants = new ArrayList<>();
TabLayout tabLayout = findViewById(R.id.sliding_tabs);
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_one)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_two)));
tabLayout.addTab(tabLayout.newTab().setText(getString(R.string.tab_three)));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
final ViewPager viewPager = findViewById(R.id.viewpager);
PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
viewPager.setOffscreenPageLimit(3);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
DrawerLayout drawer = findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
View headView = navigationView.getHeaderView(0);
HashMap<String, String> user = db.getUserDetails();
String name = user.get("name");
FloatingActionButton selectDate = findViewById(R.id.fabSelectDate);
selectDate.setOnClickListener(v -> {
DialogFragment picker = new DatePickerFragment();
picker.show(getFragmentManager(), "datePicker");
});
TextView myUserName = headView.findViewById(R.id.idUsername);
myUserName.setText(name);
ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT
// generate color based on a key (same key returns the same color), useful for list/grid views
int color = generator.getColor(user.get("uid"));
String firstLetter = name.substring(0, 1);
TextDrawable textDrawable = TextDrawable.builder().buildRound(firstLetter, color);
ImageView imageView = navigationView.getHeaderView(0).findViewById(R.id.profile_image_nav);
String myImage = user.get("image");
Picasso.with(this)
.load(AppConfig.URL_PROFILE_PHOTO + myImage)
.placeholder(textDrawable)
.error(textDrawable)
.transform(new CircleTransform())
.centerCrop()
.fit()
.into(imageView);
imageView.setOnClickListener(v -> {
Intent accountIntent = new Intent(MainActivity.this, MyProfileActivity.class);
startActivity(accountIntent);
});
myUserName.setOnClickListener(v -> {
Intent accountIntent = new Intent(MainActivity.this, MyProfileActivity.class);
startActivity(accountIntent);
});
}
}
PermissionCheck
при созданииMapFragment
. Поэтому он сначала запрашиваетpermissions
, а затем просто, если разрешения приняты, запускаетMapFragment
, а если отказано, ничего не делает. - person Aditya   schedule 03.01.2018