允许精细位置权限替换片段
Allow fine location permission to replace fragment
我想问用户他是否想授予访问他的精确位置的权限,只有在他授予权限后我才想替换一个片段并打开定位器片段。在定位器片段中,用户可以根据自己的位置看到一些商店。如果他不允许访问正确的位置,我想向他显示正确的消息。这是代码:
else if (id == R.id.nav_locator) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
fragment = new LocatorFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentlayout, fragment);
ft.commit();
应用程序当前正在崩溃,因为它会立即开始替换片段,并且它会崩溃,因为它在用户选择批准或不批准位置之前就替换了。
所以基本上我需要 一些循环想法或一些东西 如果他选择不允许许可并向他显示足够的消息,它将忽略用户请求。如果他选择授予,那么我需要像普通的那样替换片段。
请检查以下解决方案,希望它能为您正常工作。
else if (id == R.id.nav_locator)
{
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED){
goToNextFragment();
} else {
requestForLocationPermission();
}
}
private void requestForLocationPermission()
{
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION))
{
}
else {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
goToNextFragment();
}
break;
}
}
public void goToNextFragment()
{
Fragment fragment = new LocatorFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentlayout, fragment);
ft.commit();
}
我想问用户他是否想授予访问他的精确位置的权限,只有在他授予权限后我才想替换一个片段并打开定位器片段。在定位器片段中,用户可以根据自己的位置看到一些商店。如果他不允许访问正确的位置,我想向他显示正确的消息。这是代码:
else if (id == R.id.nav_locator) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
1);
fragment = new LocatorFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentlayout, fragment);
ft.commit();
应用程序当前正在崩溃,因为它会立即开始替换片段,并且它会崩溃,因为它在用户选择批准或不批准位置之前就替换了。
所以基本上我需要 一些循环想法或一些东西 如果他选择不允许许可并向他显示足够的消息,它将忽略用户请求。如果他选择授予,那么我需要像普通的那样替换片段。
请检查以下解决方案,希望它能为您正常工作。
else if (id == R.id.nav_locator)
{
int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED){
goToNextFragment();
} else {
requestForLocationPermission();
}
}
private void requestForLocationPermission()
{
if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION))
{
}
else {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults)
{
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
goToNextFragment();
}
break;
}
}
public void goToNextFragment()
{
Fragment fragment = new LocatorFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragmentlayout, fragment);
ft.commit();
}