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

时间:2016-03-25 16:28:24

标签: android android-permissions android-6.0-marshmallow

我正在尝试为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

1 个答案:

答案 0 :(得分:1)

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

相关问题