【发布时间】:2021-01-04 21:28:01
【问题描述】:
我想获取位置数据,但首先我必须获得用户的许可。所以我想在用户授予或拒绝权限时暂停应用程序
这就是我尝试的方式:
MainActivity:
public class MainActivity extends AppCompatActivity {
private static final long LOCATION_REFRESH_TIME = 15000;
private static final float LOCATION_REFRESH_DISTANCE = 500;
public static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
public Boolean locationPermissionResults=null;
double longitudeNetwork;
double latitudeNetwork;
TextView locationText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationText=findViewById(R.id.locationtext);
//getting the permission if its not granted
if(ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
locationText.setText("give permission1");
ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
//resume if granted
}
else{
locationManager();
}
}
private final LocationListener mLocationListenerNetwork = new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
latitudeNetwork = location.getLatitude();
longitudeNetwork = location.getLongitude();
locationText.setText(Double.toString(longitudeNetwork) + "//" + Double.toString(latitudeNetwork));
}
};
@SuppressLint("MissingPermission")
public void locationManager(){
LocationManager locationManagerNetwork = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManagerNetwork.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, LOCATION_REFRESH_TIME,
LOCATION_REFRESH_DISTANCE, mLocationListenerNetwork);
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case LOCATION_PERMISSION_REQUEST_CODE: {
if (permissions[0].equals(Manifest.permission.ACCESS_COARSE_LOCATION)) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
locationManager();
} else{
locationText.setText("give permission2");
}
}
}
}
}
}
我在获得许可和处理结果时遇到了问题。当用户拒绝或授予权限请求时,locationText 显示give permission1,这意味着在onCreate 方法中移动了第一个else 以及onRequestPermissionsResult 中的else。
为什么会这样?
注意:在onRequestPermissionsResult 中,我只检查onCreate 中要求的权限之一,因为如果其中一个被授予,另一个也被授予。会是这个问题吗?
【问题讨论】:
标签: android android-permissions