android获取短信电话,android ContentResolver获取手机电话号码和短信内容

通过ContentResolver 获取到手机的联系人跟手机短信信息并显示出来,供大家参考,具体内容如下

1、实现的代码:

package com.example.phone;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.net.Uri;

import android.os.Bundle;

import android.provider.ContactsContract;

import android.provider.ContactsContract.PhoneLookup;

import android.app.Activity;

import android.content.ContentResolver;

import android.database.Cursor;

import android.database.sqlite.SQLiteException;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

private TextView text;

private Button button;

private Button sms;

HashMap map = new HashMap();

List con = new ArrayList();

String msg;//联系人姓名+号码

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initUI();

}

private void initUI() {

// TODO Auto-generated method stub

text = (TextView)findViewById(R.id.text);

button = (Button)findViewById(R.id.button);//获取手机电话号码

button.setOnClickListener(this);

sms = (Button)findViewById(R.id.sms);//获取手机短信信息

sms.setOnClickListener(this);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch(v.getId()){

case R.id.button:

getPhoneNumber();//获取手机电话号码

break;

case R.id.sms://获取手机短信内容

getSmsMessage();

Map item = new HashMap();

for(int i= 0;i

text.setText(item.put("con", con.get(i))+"");//仅显示一条

System.out.println("ningshengcai:"+item.put("con", con.get(i)));//打印显示全部数据

}

break;

default :

break;

}

}

/**

* 获取手机联系人号码

*/

public void getPhoneNumber(){

// smslist=getListView();

//得到ContentResolver对象

ContentResolver cr = getContentResolver();

//取得电话本中开始一项的光标

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

while (cursor.moveToNext())

{

// 取得联系人名字

int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);

String name = cursor.getString(nameFieldColumnIndex);

//name += (name);

// 取得联系人ID

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);

// 取得电话号码(可能存在多个号码)

while (phone.moveToNext())

{

String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

System.out.println(name+":"+strPhoneNumber);

msg += name+":"+strPhoneNumber+"\n";

text.setText(msg);

}

phone.close();

}

cursor.close();

}

/**

* 获取短信信息

* @return smsBuilder.toString()

*/

@SuppressWarnings("unused")

public String getSmsMessage(){

final String SMS_URI_ALL = "content://sms/";

final String SMS_URI_INBOX = "content://sms/inbox";

final String SMS_URI_SEND = "content://sms/sent";

final String SMS_URI_DRAFT = "content://sms/draft";

StringBuilder smsBuilder = new StringBuilder();

try{

ContentResolver cr = getContentResolver();

String[] projection = new String[]{"_id", "address", "person",

"body", "date", "type"};

Uri uri = Uri.parse(SMS_URI_ALL);

Cursor cur = cr.query(uri, projection, null, null, "date desc");

if (cur.moveToFirst()) {

String name;

String phoneNumber;

String smsbody;

String date;

String type;

int nameColumn = cur.getColumnIndex("person"); //发送人

int phoneNumberColumn = cur.getColumnIndex("address"); //号码

int smsbodyColumn = cur.getColumnIndex("body"); //内容

int dateColumn = cur.getColumnIndex("date"); //时间

int typeColumn = cur.getColumnIndex("type"); //接收还是发送

do{

name = cur.getString(nameColumn);

phoneNumber = cur.getString(phoneNumberColumn);

smsbody = cur.getString(smsbodyColumn);

SimpleDateFormat dateFormat = new SimpleDateFormat(

"yyyy-MM-dd hh:mm:ss");

Date d = new Date(Long.parseLong(cur.getString(dateColumn)));

date = dateFormat.format(d);

int typeId = cur.getInt(typeColumn);

if(typeId == 1){

type = "接收";

} else if(typeId == 2){

type = "发送";

} else {

type = "";

}

//System.out.println("nsc :"+name+":"+phoneNumber+":"+smsbody+":"+date+":"+type +"\n");

String smsmsg = name+":"+phoneNumber+":"+smsbody+":"+date+":"+type+"\n";

con.add(smsmsg);

if(smsbody == null) smsbody = "";

}while(cur.moveToNext());

} else {

smsBuilder.append("no result!");

}

smsBuilder.append("getSmsInPhone has executed!");

} catch(SQLiteException ex) {

Log.d("SQLiteException in getSmsInPhone", ex.getMessage());

}

return smsBuilder.toString();

}

}

2、代码布局:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity" >

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/ph"/>

android:id="@+id/sms"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/sms"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content">

android:id="@+id/text"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world" />

3、需要用到的权限

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是获取Android手机中所有短信的实现代码。需要注意的是,需要在AndroidManifest.xml文件中添加读取短信的权限。 ```java import android.Manifest; import android.content.ContentResolver; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.Telephony; import android.util.Log; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private static final int PERMISSIONS_REQUEST_READ_SMS = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 检查权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, PERMISSIONS_REQUEST_READ_SMS); } else { readSms(); } } private void readSms() { Uri smsUri = Telephony.Sms.CONTENT_URI; ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(smsUri, null, null, null, null); if (cursor == null) { Log.d(TAG, "读取短信失败"); return; } while (cursor.moveToNext()) { // 读取短信内容及发送方号码 String address = cursor.getString(cursor.getColumnIndex(Telephony.Sms.ADDRESS)); String body = cursor.getString(cursor.getColumnIndex(Telephony.Sms.BODY)); Log.d(TAG, "address: " + address + ", body: " + body); } cursor.close(); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == PERMISSIONS_REQUEST_READ_SMS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { readSms(); } else { Log.d(TAG, "权限被拒绝"); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值