1. 程式人生 > >Android studio 獲取手機簡訊內容並輸出顯示

Android studio 獲取手機簡訊內容並輸出顯示

初學Android studio 需要做一個功能,獲取簡訊內容輸出到顯示屏上。

使用Android studio版本:3.2  JDK版本: jdk1.8.0_151  

首先在清單檔案新增許可權,獲取簡訊讀寫許可權

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

然後是編寫佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="readSMS"
        android:text="讀取手機簡訊"
        />

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </ListView>

</android.support.constraint.ConstraintLayout>

JAVA程式碼

/**
 * @author [email protected] 
 */

public class MainActivity extends AppCompatActivity {

    private             ListView                  mListView;
    private             SimpleAdapter             sa;
    private             List<Map<String, Object>> data;
    public static final int                       REQ_CODE_CONTACT = 1;



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

        initView();

    }

    private void initView() {
        //得到ListView
        mListView = (ListView) findViewById(R.id.listView);
        data = new ArrayList<Map<String, Object>>();
        //配置適配置器S
        sa = new SimpleAdapter(this, data, android.R.layout.simple_list_item_2,
                new String[]{"names", "message"}, new int[]{android.R.id.text1,
                android.R.id.text2});
        mListView.setAdapter(sa);
    }

    /**
     * 檢查申請簡訊許可權
     */
    private void checkSMSPermission() {
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            //未獲取到讀取簡訊許可權

            //向系統申請許可權
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
        } else {
            query();
        }
    }

    /**
     * 點選讀取簡訊
     * @param view
     */
    public void readSMS(View view) {
        checkSMSPermission();

    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        //判斷使用者是否,同意 獲取簡訊授權
        if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            //獲取到讀取簡訊許可權
            query();
        } else {
            Toast.makeText(this, "未獲取到簡訊許可權", Toast.LENGTH_SHORT).show();
        }
    }

    private void query() {

        //讀取所有簡訊
        Uri uri = Uri.parse("content://sms/");
        ContentResolver resolver = getContentResolver();
        Cursor cursor = resolver.query(uri, new String[]{"_id", "address", "body", "date", "type"}, null, null, null);
        if (cursor != null && cursor.getCount() > 0) {
            int _id;
            String address;
            String body;
            String date;
            int type;
            while (cursor.moveToNext()) {
                Map<String, Object> map = new HashMap<String, Object>();
                _id = cursor.getInt(0);
                address = cursor.getString(1);
                body = cursor.getString(2);
                date = cursor.getString(3);
                type = cursor.getInt(4);
                map.put("names", body);

                Log.i("test", "_id=" + _id + " address=" + address + " body=" + body + " date=" + date + " type=" + type);
                data.add(map);
                //通知介面卡發生改變
                sa.notifyDataSetChanged();
            }
        }
    }
}

參考:

相關推薦

Android studio 獲取手機簡訊內容輸出顯示

初學Android studio 需要做一個功能,獲取簡訊內容輸出到顯示屏上。 使用Android studio版本:3.2  JDK版本: jdk1.8.0_151   首先在清單檔案新增許可權,獲取簡訊讀寫許可權 <uses-permission an

Android開發之監聽或獲取手機簡訊內容

最近開始學習安卓,要做一個可以監聽手機簡訊的內容,做個筆記,方便以後檢視 有兩種方式: 方式一:通過廣播監聽簡訊資訊 註冊一個廣播接收器 <receiver android:name="接收器包名"> <intent-filte

Android studio檢視手機/data/data下資料匯出

Android studio檢視手機/data/data下資料並匯出,歷經N小時的摸索,查閱資料,最終解決這個問題。雖然看起來是小問題,但是不解決心裡不好受。網上的資料很多,但是能用的,能有效果的很少,下面我來總結我的方法。 首先要檢視data/data下的資料,要求手機必須root. 開

android-手機登入介面嘗試獲取手機號碼,可選擇雙卡雙待subscriptionId

LogonActivity.java public class LogonActivity extends Activity { private EditText nickET; private EditText passwordET; private E

基於Android studio手機聯絡人資訊獲取

最近需要做到這麼一個功能,獲取聯絡人資訊,並且將聯絡人姓名和電話顯示到螢幕上,上網查了很多資料,折騰了很久才做出來,特此寫下感想。程式碼原理不多講,度娘一大堆,在貼程式碼之前想說一下過程中容易忽略的地方:1.新增執行時許可權,很多時候我們往往只在清單裡面新增如下許可權,然而在

在不知內容的情況下獲取Excel表的內容輸出到JSP頁面

@RequestMapping(value = "/viewContent/{id}", method = RequestMethod.GET) public String do_view(@PathVariable("id") int id, ModelMap map,

Android studio獲取系統日期 設定顯示出來

Calendar calendar = Calendar.getInstance(); mMonth = String.valueOf(calendar.get(Calendar.MONTH) + 1); //獲取日期的月 mDa

Android獲取手機基站資訊進行基站定位(基站定位原理)

http://blog.csdn.net/mad1989/article/details/9970431 一,首先普及一下手機基站資訊中相關的專業詞彙:  通過TelephonyManager 獲取lac:mcc:mnc:cell-id(基站資訊)的解釋: MCC,M

Android Studio獲取開發版SHA1值和發布版SHA1值,詳細過程

pre 希望 系統 water target 詳細 andro targe pac 轉自原文 Android Studio獲取開發版SHA1值和發布版SHA1值的史上最詳細方法 前言: 今天我想把百度地圖的定位集成到項目中來,想寫個小小的案例,實現一下,但在集成

android studio手機連接調試

too 連接方式 找到 other 手機屏幕 以及 網上 platform ngs android studio 版本不同 連接手機方式有細微的不同,主要方式相似。介紹主要分手機和電腦兩部分介紹。 一、手機部分 1、手機端下載一個“一鍵root權限獲取“,在安裝的過程中需要

shell讀取文件的每一行內容輸出【轉】

jpg arch read line com http 內容 pan spa fin 寫法一: #!/bin/bash while read line do echo $line done < file(待讀取的文件) 寫法二:

Android util - 獲取剪貼板內容

boa and ger androi dma rdma sta log clip 1 public class UtilClipBoard { 2 3 public static void copy(Context context,String text)

Android Studio獲取開發版SHA1值和發布版SHA1值的史上最詳細方法

nal code tail JD rip 通過 提示 打開 tor 前言:使用百度地圖時需要秘鑰,申請秘鑰時需要SHA1值,所以今天就總結一下怎麽獲取這個值。 正常情況下: 一、獲取開發版SHA1: 在此我直接用AndroidStudio提供的命令控制臺了,畢竟做Andro

FileReader實現讀取文件內容輸出到屏幕上

null tac otf style ace 讀取 編碼 use unicode編碼 FileReader與FileInputStream都是從文件讀數據,而前者一次讀一個字符,後者一次讀一個字節(在Unicode編碼環境下1個字符=2個字節) package com.j

Total Control指令碼功能JS API之獲取裝置簡訊內容

每一個裝置物件都對應了 Total Control 中已連線的一臺手機裝置。 通過裝置物件,使用者可以獲取到手機裝置的各種屬性,以及使用控制介面對裝置進行各種操作,比如 開啟或關閉指定APP,傳送簡訊等等。今天我們就介紹如何用 JS API (messageGet)獲取手機上的簡訊內容。 mes

JNI入門教程1---Android studio 下JNI程式設計例項生成so庫

參考地址: https://www.cnblogs.com/jymblog/p/5526865.html                   https://www.jianshu.com/p/a

androidAndroid Studio連線手機沒反應,提示錯誤adb.exe start-server' failed -- run manually if necessary

摘要:有時候我們在把手機連線到AndroidStudio當中的時候會出現手機無法識別,連線視窗中顯示Nothingtoshow的情況,而我手機之前連線還是好好的呀,怎麼回事呢?我們再看一下底部提示的錯誤資訊,一般如下:'C:/Users/ZHXG/AppData/Local/Android/S

QT之Android獲取手機感測器資料學習筆記

QT += core gui sensors positioning 其中sensors是獲取手機上感測器資料的元件,positioning是獲取位置資訊的元件 1、獲取陀螺儀感測器資料 #include <QGyroscope> QGyroscope *gyrosco

Android Studio獲取開發版SHA1值和釋出版SHA1值的史上最詳細方法

前言: 今天我想把百度地圖的定位整合到專案中來,想寫個小小的案例,實現一下,但在整合百度地圖時首先要申請祕鑰,申請祕鑰要用到SHA1值,所以今天就來總結一下怎樣去獲取這個值吧,希望對大家有幫助。 正常情況下: 一、獲取開發版SHA1: 在此我直接用Android

Android筆記: 獲取手機的品牌、型號、Android系統版本號、IMEI、當前系統語言等工具類

最近在開發中,需要用到一些系統資訊,這裡我把這些方法寫成一個工具類方便以後複用,該工具類有以下6個功能: 1、獲取手機制造廠商 2、獲取手機型號 3、獲取手機系統當前使用的語言 4、獲取Andr