Android 获取未读短信(sms)数量
  HvTJUzsxOBtS 2023年11月25日 22 0



文章目录

  • 1、简介
  • 2、代码结构
  • 3、AndroidManifest 文件添加读取 短信权限
  • 4、MainActivity 功能实现
  • 5、log 结果显示


1、简介

获取手机未读短信数量

2、代码结构

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

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 获取未读短信(sms)数量_android_02


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

文献参考:
Android 获取未读未接来电和未读短信数量

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


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
HvTJUzsxOBtS