1. 程式人生 > >Android 獲取未讀簡訊(sms)數量

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