一、安卓6.0动态获取权限
String[] strings = new String[]{Manifest.permission.READ_SMS,Manifest.permission.READ_CALL_LOG,Manifest.permission.WRITE_CALL_LOG,
Manifest.permission.READ_CONTACTS,Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE
};
if (Build.VERSION.SDK_INT>=23){
for (int i = 0; i < strings.length; i++) {
int flag = ActivityCompat.checkSelfPermission(this, strings[i]);
if (flag == PackageManager.PERMISSION_DENIED){
requestPermissions(strings,101);
return;
}
}
}
二、自定义内容提供者
1.提供方:ContentProvider
(1)创建数据库,自定义类继承SQLiteOpenHelper
(2)自定义内容提供者类,继承ContentProvider,重写insert/delete/update/query方法,向外界提供方法
(3)清单文件中注册内容提供者
2.索要方:ContentResolver
(1)通过Context的getContentResolver方法获得ContentResolver对象
(2)确定uri
(3)调用insert/delete/update/query方法访问数据库
public class My_Cont extends ContentProvider {
SQLiteDatabase database;
@Override
public boolean onCreate() {
My_SQL my_sql = new My_SQL(getContext());
database = my_sql.getWritableDatabase();
return false;
}
@Override
public Cursor query( Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder) {
Cursor query = database.query("sir", projection, selection, selectionArgs, null, null, sortOrder);
return query;
}
@Override
public String getType( Uri uri) {
return null;
}
@Override
public Uri insert( Uri uri, ContentValues values) {
long sir = database.insert("sir", null, values);
if (sir>0){
return uri;
}else {
return null;
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return database.delete("sir",selection,selectionArgs);
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
return database.update("sir",values,selection,selectionArgs);
}
}
清单文件注册
<provider android:authorities="com.xxs.emm" android:name=".My_Cont" android:exported="true"></provider>
三、内容解析方实现
contentResolver = getContentResolver();
parse = Uri.parse("content://com.xxs.emm");
四、加载验证码
public class MyObsever extends ContentObserver {
MainActivity activity;
EditText et;
public MyObsever(Handler handler, MainActivity activity, EditText et) {
super(handler);
this.activity = activity;
this.et = et;
}
//改变了 短信改变了 当收到一个新消息的时候就会执行该方法
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Cursor cursor = activity.getContentResolver().query(Telephony.Sms.CONTENT_URI,null,null,null,Telephony.Sms.DATE+" desc");
if (cursor.moveToNext()){
String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
et.setText(body);
//截取短线 多个数字组成
String flag = "[0-9]{4}";
Pattern pattern = Pattern.compile(flag);
Matcher matcher = pattern.matcher(body);
//直接截取
if (matcher.find()){
String group = matcher.group();
et.setText(group);
}
}
}
}
String[] strings = new String[]{Manifest.permission.READ_SMS,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.RECEIVE_SMS,Manifest.permission.READ_CALL_LOG,Manifest.permission.WRITE_CALL_LOG,Manifest.permission.READ_CONTACTS,Manifest.permission.WRITE_CONTACTS
};
if (Build.VERSION.SDK_INT > 23){
for (int i = 0; i < strings.length; i++) {
int flag = ActivityCompat.checkSelfPermission(this, strings[i]);
if (flag == PackageManager.PERMISSION_DENIED){
requestPermissions(strings,102);
break;
}
}
}
//给解析者注册观察者
myObsever=new MyObsever(new Handler(),this,et);
getContentResolver().registerContentObserver(Telephony.Sms.CONTENT_URI,true,myObsever);
加载联系人
//获取联系人
private void query2() {
ContentResolver contentResolver = getContentResolver();
Uri sms = ContactsContract.CommonDataKinds.Phone.CONTENT_URI ;
Cursor cursor = contentResolver.query(sms, null, null, null, null);
while (cursor.moveToNext()){
String s1 = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
String s2 = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.i("xxs",s1+" "+s2);
}
}
加载短信
//获取信息方法
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private void query1() {
ContentResolver contentResolver = getContentResolver();
Uri sms = Telephony.Sms.CONTENT_URI;
Cursor cursor = contentResolver.query(sms, null, null, null, null);
while (cursor.moveToNext()){
String s1 = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY));
String s2 = cursor.getString(cursor.getColumnIndex(Telephony.Sms.DATE));
String s3 = cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS));
Log.i("xxs",s1+" "+s2+" "+s3);
}
}
加载短信
//获取通话记录
private void query3() {
ContentResolver contentResolver = getContentResolver();
Uri sms = CallLog.Calls.CONTENT_URI;
Cursor cursor = contentResolver.query(sms, null, null, null, null);
while (cursor.moveToNext()){
String s1 = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE));
String s2 = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
String s3 = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
String s4 = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
Log.i("xxs",s1+" "+s2+" "+s3+" "+s4);
}
}