我正在尝试为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
答案 0 :(得分:1)
对于那些想知道的人,这是因为我在我的MainActivity(在Manifest中)添加了NOHISTORY。现在它就像一个魅力。