【发布时间】:2016-07-07 14:39:12
【问题描述】:
我试图让我的应用程序能够在用户单击请求权限按钮 (btRequest) 时请求权限。构建应用程序时我没有问题,但是在我的手机上运行它时,我的应用程序停止了。检查权限请求工作得很好,因为当我单击 btCheck 时,我能够得到结果。尝试请求权限可能会出现什么问题?
private Context context;
private Activity activity;
private static final int PERMISSION_REQUEST_CODE = 1;
private View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Button btRequest = (Button)findViewById(R.id.btRequest);
Button btCheck = (Button)findViewById(R.id.btCheck);
btRequest.setOnClickListener(this);
btCheck.setOnClickListener(this);
}
@Override
public void onClick(View v) {
view = v;
int id = v.getId();
switch (id){
case R.id.btCheck:
if (checkPermission()) {
Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(view,"Please request permission.",Snackbar.LENGTH_LONG).show();
}
break;
case R.id.btRequest:
if (!checkPermission()) {
requestPermission();
} else {
Snackbar.make(view,"Permission already granted.",Snackbar.LENGTH_LONG).show();
}
break;
}
}
private boolean checkPermission(){
int result = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION);
if (result == PackageManager.PERMISSION_GRANTED){
return true;
} else {
return false;
}
}
private void requestPermission(){
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,Manifest.permission.ACCESS_FINE_LOCATION)){
Toast.makeText(context,"GPS permission allows us to access location data." +
" Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Snackbar.make(view,"Permission Granted, Now you can access location data.",Snackbar.LENGTH_LONG).show();
} else {
Snackbar.make(view,"Permission Denied, You cannot access location data.",Snackbar.LENGTH_LONG).show();
}
break;
}
}
}
【问题讨论】:
标签: android android-studio location runtime android-6.0-marshmallow