Android 獲取未讀簡訊(sms)數量
阿新 • • 發佈:2018-12-20
文章目錄
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