允许或拒绝权限会使应用程序崩溃 android

Allowing or deny a permission crash the app android

我正在尝试为 Android 应用实施最新的权限系统。当我触发一个按钮时,我会弹出一个对话框(这是一种预期的行为)但是当我点击允许或拒绝时,应用程序崩溃但看起来权限被正确授予或拒绝(取决于点击的按钮).

这是 onClick 方法:

public void okGetItLocation(View view){

    Log.d(TAG, "BTN FIRED");
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) {

        Log.d(TAG, "WE HAVE TO SHOW AN EXPLANATION");
        // Create a LocationPermissionError fragment
        NoLocationPermissionsFragment noLocationPermissionsFragment = new NoLocationPermissionsFragment();
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, noLocationPermissionsFragment)
                .commit();

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    }else {

        Log.d(TAG, "POPUP SHOWN");

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_ASK_PERMISSIONS);

        // REQUEST_CODE_ASK_PERMISSIONS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

这是获取用户选择的方法:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {
        case REQUEST_CODE_ASK_PERMISSIONS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                Log.d(TAG, "PERMISSIONS GRANTED");

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                Log.d(TAG, "PERMISSIONS DENIED");

                // Create a LocationPermissionError fragment
                NoLocationPermissionsFragment noLocationPermissionsFragment = new NoLocationPermissionsFragment();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment_container, noLocationPermissionsFragment)
                        .commit();

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

我的日志:

03-25 12:19:38.673 2944-2944/com.danajeremy.egullapireading D/FIRSTACTIVITY: BTN FIRED
03-25 12:19:38.673 2944-2944/com.danajeremy.egullapireading D/FIRSTACTIVITY: POPUP SHOWN
03-25 12:19:39.375 2944-2963/com.danajeremy.egullapireading E/Surface: getSlotFromBufferLocked: unknown buffer: 0xeb16d800

对于那些想知道的人,那是因为我在我的 MainActivity 上(在清单中)添加了 NOHISTORY。现在它就像一个魅力。