【问题标题】:App quits after deliberately not giving location permission故意不授予位置权限后应用退出
【发布时间】:2019-04-18 11:42:32
【问题描述】:

当我在弹出权限请求屏幕时故意不做任何事情时会发生此问题,应用程序会在几秒钟后崩溃。

权限请求从另一个活动(LoginActivity)转换到 MapsActivity 后弹出。

登录活动

if statement to check the validity
    if valid
        Intent intent = new Intent(LoginActivity.this,MapActivity.class);
        startActivity(intent);
        finish();

地图活动

...    
public void onMapReady(GoogleMap map) {
    mMap = map;
    getLocationPermission();
    updateLocationUI();
    getDeviceLocation();
}

private void getLocationPermission() {
    if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        mLocationPermissionGranted = true;
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
    }
}

【问题讨论】:

  • 添加崩溃日志..
  • 添加崩溃日志,说明您究竟需要什么以及发生了什么。因此有人可以快速帮助您。
  • @AjayMehta-Rlogical Logcat 上没有弹出任何错误。
  • @AjayMehta-Rlogical at android.support.v4.app.ActivityCompat.requestPermissions(ActivityCompat.java:502) at com.turnitin_fyp.prezent.MapsActivityCurrentPlace.getLocationPermission(MapsActivityCurrentPlace.java:166) at com.turnitin_fyp.prezent.MapsActivityCurrentPlace.updateLocationUI(MapsActivityCurrentPlace.java:207) at com.turnitin_fyp.prezent.MapsActivityCurrentPlace.onRequestPermissionsResult(MapsActivityCurrentPlace.java:189)

标签: android geolocation android-permissions


【解决方案1】:

我正在以这种方式检查权限,并且工作正常,试试这个:-

if (checkLocationPermission()) {
                    Log.e("Tag", "Camera and External storage Permission's are allowed");
                } else {
                    requestLocationPermission();
                } 

这是方法 checkLocationPermission:-

private boolean checkLocationPermission() {
        int result = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (result == PackageManager.PERMISSION_GRANTED) {
            return true;
        } else {
            return false;
        }
    }

这是位置请求方法:-

private void requestLocationPermission() {
        if (ActivityCompat.shouldShowRequestPermissionRationale
                        (this, Manifest.permission.ACCESS_FINE_LOCATION)) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, R.style.DialogTheme);
            alertDialog.setMessage("You Have To Give Permission From Your Device Setting To go in Setting Please Click on Settings Button");
            alertDialog.setCancelable(false);
            alertDialog.setPositiveButton("Go To Settings", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            });
            alertDialog.show();
        } else {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1012);
        }
    }

最后是 onRequestPermissionsResult:-

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(this, R.style.DialogTheme);
            alertDialog.setMessage("You Have To Give Permission From Your Device Setting To go in Setting Please Click on Settings Button");
            alertDialog.setCancelable(false);
            alertDialog.setPositiveButton("Go To Settings", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            });
            alertDialog.show();
        }else{
          // do your stuff in case accept permission
        }

    }

【讨论】:

  • 如果您有任何疑问,请发表评论,如果对您有帮助,请感谢答案
  • ACCESS_FINE_LOCATION 一直在清单文件中。
  • 您提到的权限在清单文件中始终存在。
  • <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
  • 如果它对您有帮助,那么感谢您的回答
【解决方案2】:

刚刚意识到如何用一个简单的解决方案来解决这个问题 lmao... 在我的原始代码中,我已经有 onRequestPermissionResult() 了。

地图活动

private boolean mLocationPermissionGranted;

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    mLocationPermissionGranted = false;
    switch (requestCode) {
        case PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                mLocationPermissionGranted = true;
            }
        }
    }
    updateLocationUI();
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
...
getLocationPermission();
    if(mLocationPermissionGranted){
        updateLocationUI();
        getDeviceLocation();

    }
}

现在不再崩溃 :)

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 2021-05-25
    • 2021-01-22
    • 1970-01-01
    • 2020-09-04
    • 2020-03-16
    相关资源
    最近更新 更多