本文章为项目中遇到的权限修改
项目BUG:切换权限后进入会有一个黑色标题栏
// 在style.xml文件里定义
<resources>
<style name="notitle">
<item name="android:windowNoTitle">true</item>
</style>
</resources>
// 然后AndroidManifest.xml中引用
<application android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/notitle">
修改:AndroidPermission -> getLocationPermissions
// 地址权限
public static boolean getLocationPermissions(Activity activity) {
if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION);
return false;
}else{
return true;
}
}
Loding时权限Activity_Loading -> onCreate:
public void onCreate(Bundle savedInstanceState) {
setFullscreen();
super.onCreate(savedInstanceState);
context = this;
AppVoicePlay.stop_all_voice(this, "Activity_Loading");
ApplicationApp.myncicDebuger.checkKill(this);
DLog.e("", ApplicationApp.isfast+"=======isfast");
add_ring_list();
setContentView(R.layout.activity_loading);
location_dont_open = (LinearLayout) findViewById(R.id.location_dont_open);
location_srue_click = (TextView) findViewById(R.id.location_srue_click);
activity_loading_img = (ImageView) findViewById(R.id.activity_loading_img);
activity_loading_img.setBackgroundResource(R.drawable.run_loading_img);
// 判断权限
List<String> permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(this, Manifest.
permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(this, Manifest.
permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.READ_PHONE_STATE);
}
if (ContextCompat.checkSelfPermission(this, Manifest.
permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (!permissionList.isEmpty()) {
String [] permissions = permissionList.toArray(new String[permissionList.size()]);
ActivityCompat.requestPermissions(this, permissions, 1);
} else {
if (!ApplicationApp.isfast) {
handler.sendEmptyMessageDelayed(LOADING_FINISH, 0);
return;
}else {
try {
setContentView(R.layout.activity_loading);
location_dont_open = (LinearLayout) findViewById(R.id.location_dont_open);
location_srue_click = (TextView) findViewById(R.id.location_srue_click);
activity_loading_img = (ImageView) findViewById(R.id.activity_loading_img);
activity_loading_img.setBackgroundResource(R.drawable.run_loading_img);
location_srue_click.setText("关闭");
location_dont_open.setVisibility(View.GONE);
locationclient = new BaseLocation(getBaseContext());
locationclient.startLocation(1000);
locationclient.setLocationInterface(new LocationInterface() {
@Override
public void onReceiveLocation(AMapLocation amapLocation) {
if (amapLocation != null && amapLocation.getErrorCode() == 0) { //定位错误代码。错误代码==0,则定位成功
// ApplicationApp.my_now_location = amapLocation;
get_system_config();
startUPLoadLocationData(amapLocation);
try {
locationclient.onDestroy();
} catch (Exception e) {
e.printStackTrace();
}
}else {
if (load_location_num > 3) {
location_dont_open.setVisibility(View.VISIBLE);
listener();
}else {
load_location_num++;
}
}
}
});
} catch (Exception e) {
}
}
handler.sendEmptyMessageDelayed(LOADING_FINISH, 3000);
}
}
Loading时权限Activity_Loading -> 写一个回调方法
// 处理权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
if (grantResults.length > 0) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
BaseDialog dialog = new BaseDialog(context, BaseDialog.DIALOG_BASE, ApplicationApp.DIALOG_STYLE, new BaseDialogListener() {
@Override
public void OnClick(Dialog dialog, View view, String editTextStr) {
if(view.getId() == com.myncic.mynciclib.R.id.dialogsure){
}else if(view.getId() == com.myncic.mynciclib.R.id.dialogcancel){
Intent intent = new Intent()
.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package",
context.getPackageName(), null));
startActivity(intent);
}
finish();
dialog.dismiss();
}
});
dialog.setButtonText("取消","去设置");
dialog.setContentText("未获取到存储或定位权限,程序无法正常工作,请设置!");
dialog.dialogtitle.setVisibility(View.GONE);
dialog.setCancelable(false);
dialog.show();
return;
}
}
if(!ApplicationApp.isfast){
handler.sendEmptyMessageDelayed(LOADING_FINISH, 0);
}else handler.sendEmptyMessage(LOADING_FINISH);
} else {
Toast.makeText(this, "发生未知错误", Toast.LENGTH_SHORT).show();
finish();
}
break;
default:
}
}
点击聊天界面权限:MsgInnerContent ->
// 点击位置判断定位权限和进入定位地图
positionBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(AndroidPermission.getLocationPermissions(context)){
if(CheckDispose.clickInterval(500))
return;
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("operType",2);
intent.setClass(context, Activity_MsgPositionChoose.class);
intent.putExtras(bundle);
Activity activity = (Activity)context;
activity.startActivityForResult(intent, Activity_MsgPositionChoose.CHOOSE_POSITION_START);
}
}
});
...
// 点击图片判断权限进入选择图库
imageBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(AndroidPermission.getExternalStrongePermissions(context)){
if(CheckDispose.clickInterval(300))
return;
ImageSelectorActivity.start(context,1);
}
}
});
...
点击聊天界面权限:Activity_MsgContent -> 写一个回调方法
// 处理权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
// 获取储存权限
case AndroidPermission.REQUEST_EXTERNAL_STRONGE:
if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
if(CheckDispose.clickInterval(300))
return;
ImageSelectorActivity.start(Activity_MsgContent.this,1);
}else{
// 获取提示框
getDialog();
}
break;
// 获取地址权限
case AndroidPermission.REQUEST_LOCATION:
if (permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION)
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
if(CheckDispose.clickInterval(500))
return;
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putInt("operType",2);
intent.setClass(context, Activity_MsgPositionChoose.class);
intent.putExtras(bundle);
Activity activity = (Activity)context;
activity.startActivityForResult(intent, Activity_MsgPositionChoose.CHOOSE_POSITION_START);
}else{
// 获取提示框
getDialog();
}
break;
}
}
点击聊天界面权限:MsgInnerContent -> 写一个弹出框方法
// 权限不足提示框
public void getDialog() {
BaseDialog dialog = new BaseDialog(context, BaseDialog.DIALOG_BASE, ApplicationApp.DIALOG_STYLE, new BaseDialogListener() {
@Override
public void OnClick(Dialog dialog, View view, String editTextStr) {
if(view.getId() == com.myncic.mynciclib.R.id.dialogsure){
}else if(view.getId() == com.myncic.mynciclib.R.id.dialogcancel){
Intent intent = new Intent()
.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package",
context.getPackageName(), null));
startActivity(intent);
}
dialog.dismiss();
}
});
dialog.setButtonText("取消","去设置");
dialog.setContentText("未获取到权限,程序无法正常工作,请设置!");
dialog.dialogtitle.setVisibility(View.GONE);
dialog.setCancelable(false);
dialog.show();
}
点击权限:拍摄照片权限ImageSelectorActivity -> 定义
public final static int REQUEST_PERMISSION_CAMERA=464;
点击权限:拍照权限ImageSelectorActivity -> startCamera()
/**
* 打开拍照和权限判断
* start to camera、preview、crop
*/
public void startCamera() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA,
Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA);
return ;
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues contentValues = new ContentValues(1);
File cameraFile = FileUtils.createCameraFile(this);
cameraPath = cameraFile.getAbsolutePath();
contentValues.put(MediaStore.Images.Media.DATA, cameraFile.getAbsolutePath());
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CAMERA);
}
点击权限:拍照权限ImageSelectorActivity -> 写一个回调方法
//处理权限
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
// requestCode即所声明的权限获取码,在checkSelfPermission时传入
case REQUEST_PERMISSION_CAMERA:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 获取到权限,作相应处理(调用定位SDK应当确保相关权限均被授权,否则可能引起定位失败)
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues contentValues = new ContentValues(1);
File cameraFile = FileUtils.createCameraFile(this);
cameraPath = cameraFile.getAbsolutePath();
contentValues.put(MediaStore.Images.Media.DATA, cameraFile.getAbsolutePath());
Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CAMERA);
} else {
// 没有获取到权限,做特殊处理
Toast.makeText(getApplicationContext(), "获取位置权限失败,请设置照相权限", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
点击扫码权限:Fragment_QRScan
public void initCamera(){
Activity activiy = (Activity)context;
if(!AndroidPermission.getCameraPermissions(activiy)){
}
...
}
点击扫码权限:Activity_PPGroup_Radar_QR
// 处理权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
// 获取拍照权限
case AndroidPermission.REQUEST_CAMERA:
if (permissions[0].equals(Manifest.permission.CAMERA)
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
qrscanFragment.initCamera();
}else{
// 获取提示框
BaseDialog dialog = new BaseDialog(context, BaseDialog.DIALOG_BASE, ApplicationApp.DIALOG_STYLE, new BaseDialogListener() {
@Override
public void OnClick(Dialog dialog, View view, String editTextStr) {
if(view.getId() == com.myncic.mynciclib.R.id.dialogsure){
}else if(view.getId() == com.myncic.mynciclib.R.id.dialogcancel){
Intent intent = new Intent()
.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package",
context.getPackageName(), null));
startActivity(intent);
}
dialog.dismiss();
}
});
dialog.setButtonText("取消","去设置");
dialog.setContentText("未获取到权限,程序无法正常工作,请设置!");
dialog.dialogtitle.setVisibility(View.GONE);
dialog.setCancelable(false);
dialog.show();
}
break;
default:
}
}
点击竞价权限:Net_Work -> startGetOrder() ->
public static void startGetOrder(final Context context,final JSONObject order_info,final String id,final return_order re_order){
Activity activity = (Activity) context;
if(!AndroidPermission.getLocationPermissions(activity)){
return;
}
...
}
启动主页面权限:init()
public void init(){
// 进入主页面判断定位和储存权限
Activity activiy = (Activity)context;
if(!AndroidPermission.getLocationPermissions(activiy)){}
if(!AndroidPermission.getExternalStrongePermissions(activiy)){}
...
}
启动主页面权限(回调):Activity_Main
// 处理权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
// 获取地址权限
case AndroidPermission.REQUEST_LOCATION:
if (permissions[0].equals(Manifest.permission.ACCESS_FINE_LOCATION)
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
}else{
// 获取提示框
BaseDialog dialog = new BaseDialog(context, BaseDialog.DIALOG_BASE, ApplicationApp.DIALOG_STYLE, new BaseDialogListener() {
@Override
public void OnClick(Dialog dialog, View view, String editTextStr) {
if(view.getId() == com.myncic.mynciclib.R.id.dialogsure){
}else if(view.getId() == com.myncic.mynciclib.R.id.dialogcancel){
Intent intent = new Intent()
.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package",
context.getPackageName(), null));
startActivity(intent);
}
dialog.dismiss();
}
});
dialog.setButtonText("取消","去设置");
dialog.setContentText("未获取到权限,程序无法正常工作,请设置!");
dialog.dialogtitle.setVisibility(View.GONE);
dialog.setCancelable(false);
dialog.show();
}
break;
// 获取储存权限
case AndroidPermission.REQUEST_EXTERNAL_STRONGE:
if (permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)
&& grantResults[0] == PackageManager.PERMISSION_GRANTED){
init();
}else{
// 获取提示框
BaseDialog dialog = new BaseDialog(context, BaseDialog.DIALOG_BASE, ApplicationApp.DIALOG_STYLE, new BaseDialogListener() {
@Override
public void OnClick(Dialog dialog, View view, String editTextStr) {
if(view.getId() == com.myncic.mynciclib.R.id.dialogsure){
}else if(view.getId() == com.myncic.mynciclib.R.id.dialogcancel){
Intent intent = new Intent()
.setAction("android.settings.APPLICATION_DETAILS_SETTINGS")
.setData(Uri.fromParts("package",
context.getPackageName(), null));
startActivity(intent);
}
dialog.dismiss();
}
});
dialog.setButtonText("取消","去设置");
dialog.setContentText("未获取到权限,程序无法正常工作,请设置!");
dialog.dialogtitle.setVisibility(View.GONE);
dialog.setCancelable(false);
dialog.show();
}
break;
}
}