我也是获得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 如何读取系统最新短信等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)