android 获取短信内容时,无法获取person字段的内容

android 获取短信内容时,无法获取person字段的内容,第1张

我也是获得Null的 你可以和联系人关联起来

// 通过address手机号关联Contacts联系人的显示名字

private String getPeopleNameFromPerson(String address){

if(address == null || address == ""){

return "( no address )\n";

}

String strPerson = "null";

String[] projection = new String[] {PhoneDISPLAY_NAME, PhoneNUMBER};

Uri uri_Person = UriwithAppendedPath(ContactsContractCommonDataKindsPhoneCONTENT_FILTER_URI, address); // address 手机号过滤

Cursor cursor = getContentResolver()query(uri_Person, projection, null, null, null);

if(cursormoveToFirst()){

int index_PeopleName = cursorgetColumnIndex(PhoneDISPLAY_NAME);

String strPeopleName = cursorgetString(index_PeopleName);

strPerson = strPeopleName;

}

else{

strPerson = address;

}

cursorclose();

return strPerson;

}

Java代码

// android获取短信所有内容

// 注意设置权限[添加到AndroidMainfestxml] <uses-permission android:name="androidpermissionREAD_SMS" />

public String getSmsInPhone()

{

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 = Uriparse(SMS_URI_ALL);

Cursor cur = crquery(uri, projection, null, null, "date desc");

if (curmoveToFirst()) {

String name;

String phoneNumber;

String smsbody;

String date;

String type;

int nameColumn = curgetColumnIndex("person");

int phoneNumberColumn = curgetColumnIndex("address");

int smsbodyColumn = curgetColumnIndex("body");

int dateColumn = curgetColumnIndex("date");

int typeColumn = curgetColumnIndex("type");

do{

name = curgetString(nameColumn);

phoneNumber = curgetString(phoneNumberColumn);

smsbody = curgetString(smsbodyColumn);

SimpleDateFormat dateFormat = new SimpleDateFormat(

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

Date d = new Date(LongparseLong(curgetString(dateColumn)));

date = dateFormatformat(d);

int typeId = curgetInt(typeColumn);

if(typeId == 1){

type = "接收";

} else if(typeId == 2){

type = "发送";

} else {

type = "";

}

smsBuilderappend("[");

smsBuilderappend(name+",");

smsBuilderappend(phoneNumber+",");

smsBuilderappend(smsbody+",");

smsBuilderappend(date+",");

smsBuilderappend(type);

smsBuilderappend("] ");

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

}while(curmoveToNext());

} else {

smsBuilderappend("no result!");

}

smsBuilderappend("getSmsInPhone has executed!");

} catch(SQLiteException ex) {

Logd("SQLiteException in getSmsInPhone", exgetMessage());

}

return smsBuildertoString();

}

加一个排序条件就行了

ContentResolver resolver = getContentResolver();

Uri uri = Uriparse("content://sms/");

Cursor cursor = resolverquery(uri, null, null, null, "date");

或者是Cursor cursor = resolverquery(uri, null, null, null, "date desc");

android44以上Google提高了用户的安全性。如果想获取短信发件人就要获取手机号,正是手机号,运营商将卡的信息直接写入卡中,但是运营商现在也不将它再继续写入。通过imsi得到的手机卡信息,部分获取不到,部分能成功!你可以试着让用户自己发短信给你,获取手机号。

public class test0304 extends Activity {

/ Called when the activity is first created /

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

TelephonyManager tm = (TelephonyManager) getSystemService(ContextTELEPHONY_SERVICE);

StringBuilder sb = new StringBuilder();

sbappend("\nDeviceId(IMEI) = " + tmgetDeviceId());

sbappend("\nDeviceSoftwareVersion = " + tmgetDeviceSoftwareVersion());

sbappend("\nLine1Number = " + tmgetLine1Number());

sbappend("\nNetworkCountryIso = " + tmgetNetworkCountryIso());

sbappend("\nNetworkOperator = " + tmgetNetworkOperator());

sbappend("\nNetworkOperatorName = " + tmgetNetworkOperatorName());

sbappend("\nNetworkType = " + tmgetNetworkType());

sbappend("\nPhoneType = " + tmgetPhoneType());

sbappend("\nSimCountryIso = " + tmgetSimCountryIso());

sbappend("\nSimOperator = " + tmgetSimOperator());

sbappend("\nSimOperatorName = " + tmgetSimOperatorName());

sbappend("\nSimSerialNumber = " + tmgetSimSerialNumber());

sbappend("\nSimState = " + tmgetSimState());

sbappend("\nSubscriberId(IMSI) = " + tmgetSubscriberId());

sbappend("\nVoiceMailNumber = " + tmgetVoiceMailNumber());

Loge("info", sbtoString());

}

}

数据库获取代码如下:

String databaseFilename = DATABASE_PATH + "/" + DATABASE_NAME;

File dir = new File(DATABASE_PATH);

if (!direxists())

dirmkdir();

if (!(new File(databaseFilename))exists()) {

InputStream is = contextgetResources()openRawResource(Rrawjobexam);

FileOutputStream fos = new FileOutputStream(databaseFilename);

byte[] buffer = new byte[8192];

int count = 0;

while ((count = isread(buffer)) > 0) {

foswrite(buffer, 0, count);

}

fosclose();

isclose();

}

db = SQLiteDatabaseopenOrCreateDatabase(databaseFilename, null);

1、调用Phone中的getSmscAddress(Message message)方法,其中参数的message为获取到结果后发送消息给mHandler,并查询结果AsyncResult的result属性中。

phone=PhoneFactorygetDefaultPhone();

phonegetSmscAddress(mHandlerobtainMessage(EVENT_QUERY_SMSC_DONE));

2、mHandler实现代码

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

AsyncResult ar;

switch (msgwhat) {

case EVENT_QUERY_SMSC_DONE:

ar= (AsyncResult) msgobj;

if (arexception != null) {

} else {

// TODO: handle exception

mSmsServiceCenterPrefsetSummary((String)arresult);

}

}

default:

break;

}

}

};

以上就是关于android 获取短信内容时,无法获取person字段的内容全部的内容,包括:android 获取短信内容时,无法获取person字段的内容、android开发怎样获取系统短信指定内容求大神啊!、android 如何读取系统最新短信等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9491670.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存