6.0刚出显示,动态申请各种头疼,之后出现各种封装框架,但是本人一直使用的系统自带的那一套,然后就是遇见各种品牌手机不同的申请过程。早期突然灵光一动想到的一种偷懒且兼容性很高的方式,O(∩_∩)O哈哈~可能你只是没想到,贴下代码,你想笑。
以申请短息的权限为例子。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
//申请WRITE_EXTERNAL_STORAGE权限
ActivityCompat.requestPermissions((Activity) context, new String[]{android.Manifest.permission.READ_SMS},
2);
return;
} else {
getSmsFromPhone(deliverBean.getCustomerId());
}
} else {
getSmsFromPhone(deliverBean.getCustomerId());
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if (requestCode == 2) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Perd
getSmsFromPhone(deliverBean.getCustomerId());
} else {
Toast.makeText(context, "请开启短信权限!", Toast.LENGTH_LONG).show();
finish();
}
}
}
public void getSmsFromPhone(final String customerId) {
new Thread(new Runnable() {
@Override
public void run() {
Cursor cur = null;
try {
Uri SMS_INBOX = Uri.parse("content://sms/");
ContentResolver cr = getContentResolver();
String[] projection = new String[]{"_id", "address", "person", "body", "date", "type"};
cur = cr.query(SMS_INBOX, projection, null, null, "date desc");
if (null == cur) {
return;
}
List<CustomerSmsRecordSubmitBean> customerSmsRecordSubmitBeanList = new ArrayList<>();
while (cur.moveToNext()) {
String number = cur.getString(cur.getColumnIndex("address"));//手机号
String body = cur.getString(cur.getColumnIndex("body"));//短信内容
String date = cur.getString(cur.getColumnIndex("date"));//短信时间
String type = cur.getString(cur.getColumnIndex("type"));//短信时间
//至此就获得了短信的相关的内容, 以下是把短信加入map中,构建listview,非必要。
CustomerSmsRecordSubmitBean customerSmsRecordSubmitBean = new CustomerSmsRecordSubmitBean(number, date, body, type);
customerSmsRecordSubmitBeanList.add(customerSmsRecordSubmitBean);
}
cur.close();
} catch (Exception e) {
if (cur != null) {
cur.close();
}
Toast.makeText(context, "请开启短信权限!", Toast.LENGTH_LONG).show();
MyLog.e("bbbbb", "生活啊啊啊啊啊~~~~~~~~~");
}
}
}).start();
}
不要想什么兼容就是把保存的代码加上try{需要权限操作的代码}catch(Exception e){提示用户需要申请权限},就是这么简单有没有会心一笑的感觉,O(∩_∩)O哈哈~,还是发现很多人出现问题,也不看问题的报错具体是什么,先去问别人或者百度,像是权限,如果测试机是6.0你没申请权限,他会明明白白的给你再后面写着需要申请哪个权限,你把申请代码复制粘贴就完事了,还要在问一遍为啥,我也是醉了。问题问完是要理解,知道,不是复制完事,出现就在忘记。