资源提供者和资源解析者

一、安卓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);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MX_XXS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值