安卓开发系列 之如何获取手机短信内容

1 手机中短信数据库相关字段包括:
_id:短信序号,如100   
address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否+86,可以加上86和不加86分别测试下  
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null   
date:日期,long型,如1256539465022,可以对日期显示格式进行设置,这里在用sqlite语句进行筛选时date字段单位是毫秒,获取系统毫秒时间的代码是:

long totalMilliSeconds = System.currentTimeMillis();   

protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信      
read:是否阅读0未读,1已读   
status:短信状态-1接收,0complete,64pending,128failed   
type:短信类型1是接收到的,2是已发出      
body:短信具体内容
读取短信内容的uri为:
Uri uri = Uri.parse(“content://sms”); //读取所有短信
Uri uri = Uri.parse(“content://sms/inbox”); //读取收件箱短信

2 在清单文件添加权限,获取短信读写权限:

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/> 

3 核心代码为:

private void checkSMSPermission() {
    
    
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED) {
    
    
            //未获取到读取短信权限
            //向系统申请权限
            ActivityCompat.requestPermissions(this,
                    new String[]{
    
    Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
        } else {
    
    
           //执行自己的程序 
        }
    }

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    
    
        //判断用户是否,同意 获取短信授权
        if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
    
            //获取到读取短信权限
            //执行自己的程序
        } else {
    
    
            Toast.makeText(this, "未获取到短信权限", Toast.LENGTH_SHORT).show();
        }
    }

private void query() {
    
    
        //读取所有短信
        Uri uri = Uri.parse("content://sms/");
        ContentResolver resolver = getContentResolver();
        //查询条件可以根据实际业务填写,这里均为null,代表没有筛选条件
        //其中第三个参数代表where条件
        //第五个参数代表order by
        //第四个参数根据第三个参数来写,如果你在第三个参数里面有?,那么你在第四个写的数据就会替换掉?
        Cursor cursor = resolver.query(uri, new String[]{
    
    "_id", "address", "body", "date", "type"}, null, null, null);
        if (cursor != null && cursor.getCount() > 0) {
    
    
            String body;
            while (cursor.moveToNext()) {
    
    
               //存储短信内容
               body = cursor.getString(2);
            }
        }
    }
//补充:
cursor.close();//关闭游标,且释放资源
cursor.isClosed();//如果为TRUE表示该游标已关闭
cursor.getColumnCount();//返回所有列的总数
cursor.getColumnNames();//返回一个字符串数组的列名,即将列名全部返回到一个字符串数组中
cursor.getColumnName(columnIndex);//从给定的索引返回列名
cursor.getCount();//返回Cursor中的行数
cursor.moveToFirst();//移动光标到第一行
cursor.moveToLast();//移动光标到最后一行
cursor.moveToNext();//移动光标到下一行
cursor.moveToPrevious();//移动光标到上一行
cursor.moveToPosition(position);//移动光标到给定位置

参考资料:

https://blog.csdn.net/qq_42179105/article/details/82929521?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&dist_request_id=8d7d5f2b-1b3f-4f66-b5d1-e89d3979bb04&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control Android studio 获取手机短信内容并输出显示

https://blog.csdn.net/chenliguan/article/details/48316585 Android进阶之读取手机短信显示listview

https://blog.csdn.net/ALittleForward/article/details/40480389?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1f38157e-2fdc-42f8-ab73-f2990ab5f300&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 基于Android的短信应用开发

猜你喜欢

转载自blog.csdn.net/langxiaolin/article/details/114261336