android - 在获得用户许可时暂停应用程序的问题
问题描述
我想获取位置数据,但首先我必须获得用户的许可。所以我想在用户授予或拒绝权限时暂停应用程序
这就是我尝试这样做的方式:
主要活动:
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
这意味着移过 first else
inonCreate
方法和else
in onRequestPermissionsResult
。为什么会这样?
注意:在onRequestPermissionsResult
我只检查请求的权限之一,onCreate
因为如果其中一个被授予,另一个也被授予。这可能是问题吗?
解决方案
您不能暂停应用程序。你也不能在主线程上等待。你需要重新组织你的活动,这样你就不需要这样做了——创建一个空的或等待的状态,直到数据可用。
推荐阅读
- html - 为什么我的页面固定标题覆盖在页面内容下方?
- javascript - 滚动条上的 ScrollMagic 动画,即使滚动条被禁用
- java - 如何在 ProcessFunction 中使用 Flink 异步 I/O 执行异步 Cassandra 查找?
- robotframework - 在机器人框架中将逗号插入数字
- webhooks - 为所有意图启用 webhook
- android - 后台服务在奥利奥中不起作用
- javascript - 无法读取未定义 ReactJS 的属性“setState”
- python - 熊猫无法打开路径中带有变音符号的文件
- ios - iOS - 检查自己的应用程序内的呼叫联系人并显示名称
- python - 如何将嵌套列表的列表更改为字符串?