文章目录
- 1、简介
- 2、代码结构
- 3、AndroidManifest 文件添加读取 短信权限
- 4、MainActivity 功能实现
- 5、log 结果显示
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 获取未读未接来电和未读短信数量
Android实现获取未接来电和未读短信数量的方法_Android
https://yq.aliyun.com/ziliao/145858