Android 获取未读短信(sms)数量

1、简介

获取手机未读短信数量

2、代码结构

在这里插入图片描述

3、AndroidManifest 文件添加读取 短信权限

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

4、MainActivity 功能实现

package com.example.tssh.mytestsms;

import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    private String TAG  = "MainActivity: ";


//短信到来时 调用 onChange 函数
    private ContentObserver newMmsContentObserver = new ContentObserver(new Handler()) {
        public void onChange(boolean selfChange) {
            System.out.println("接收到的广播的数据````````:");
            getUnreadSmsCount();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        registerObserver();  //注册监听接受短信
        checkPermission();  //检查权限
        getUnreadSmsCount();  //读未读短信数目
    }

    private void registerObserver() {
        unregisterObserver();
        getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,
                newMmsContentObserver);
    }

    private synchronized void unregisterObserver() {
        try {
            if (newMmsContentObserver != null) {
                getContentResolver().unregisterContentObserver(newMmsContentObserver);
            }
        } catch (Exception e) {
            Log.e(TAG, "unregisterObserver fail");
        }

    }

        //得到未读短信的数量  通过查询数据库得到
    private void getUnreadSmsCount() {
        int result = 0;
        Cursor csr = getContentResolver().query(Uri.parse("content://sms"), null,
                "type = 1 and read = 0", null, null);
        if (csr != null) {
            result = csr.getCount();
            csr.close();

            Log.i(TAG,"得到的未读短短信数量是:" + result);
        }
    }


    //sd 卡权限检查
    private void checkPermission() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS)
                        != PackageManager.PERMISSION_GRANTED) {
            Log.i(TAG,"没有权限进行申请");
            ActivityCompat.requestPermissions(this, new String[]
                    {Manifest.permission.READ_SMS,Manifest.permission.RECEIVE_SMS},100);
        } else {
            Log.i(TAG,"已经有权限");
        }
    }



    //sd 卡权限申请
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        if(requestCode == 100){
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.i(TAG,"用户同意权限申请");
            } else {
                Log.i(TAG,"用户不同意权限申请");
            }
        }
    }


    @Override
    protected void onDestroy() {
        //取消注册
        unregisterObserver();
        super.onDestroy();
    }


}


5、log 结果显示

在这里插入图片描述
在这里插入图片描述

文献参考:
Android 获取未读未接来电和未读短信数量
https://blog.csdn.net/sfh366958228/article/details/20319761

Android实现获取未接来电和未读短信数量的方法_Android
https://yq.aliyun.com/ziliao/145858

猜你喜欢

转载自blog.csdn.net/qq_27061049/article/details/84842225