我想做个功能就是收到短信时,调用Toast这个类显示收到短信了,这个该怎么做啊
解决方案 »
- 好久没问问题了,来个framelayout的问题先
- 多次点击Button响应new thread的问题
- 大哥帮忙:Android的Intent到一个webserver报异常
- 真心求教,敢来个高手帮忙解决下问题吗?
- 传说中支持C++开发的android会在什么时候出来呢
- 有人试过两个一样的进程一起运行么?
- 如果遇到以前没接触过的技术应该如何学习他它解决它,求解答。
- 学习android程序开发需要有什么基础?
- Android项目从其它电脑拷到本电脑,import后报错
- MultiImageSelector库 急需
- 请问FLAG_UPDATE_CURRENT和FLAG_CANCEL_CURRENT到底是什么区别啊?
- listview如何取得指定position的view。
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
StringBuilder body = new StringBuilder();
StringBuilder number = new StringBuilder();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
number.append(currentMessage.getDisplayOriginatingAddress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
Toast.makeText(context, "号码:"+smsNumber+"\n内容:"+smsBody, Toast.LENGTH_SHORT).show();
}
}}注册:
<receiver android:name="SmsReceiverToast">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
package com.java.wjd.android;import java.text.SimpleDateFormat;
import java.util.Date;import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.view.Gravity;
import android.widget.Toast;public class GetSmsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//System.out.println(getSmsInPhone());
getSms();
}
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 = 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 = "";
}
smsBuilder.append("[");
smsBuilder.append(name+",");
smsBuilder.append(phoneNumber+",");
smsBuilder.append(smsbody+",");
smsBuilder.append(date+",");
smsBuilder.append(type);
smsBuilder.append("] ");
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();
}
public void getSms(){
ContentResolver cr = getContentResolver();
Uri uri = Uri.parse("content://sms/");
String[] projection = new String[]{"address","body"};
Cursor cur = cr.query(uri, projection, null, null, null);
if(cur!=null && cur.getCount()>0){
cur.moveToFirst();
do{
String phoneNumber = cur.getString(cur.getColumnIndex("address"));
if(phoneNumber.equals("15555215556")){
System.out.println(cur.getString(cur.getColumnIndex("body")));
//Log.e("短信内容:",cur.getString(cur.getColumnIndex("body")));
}
}while(cur.moveToNext());
}
}
public class SmsReceiverToast extends BroadcastReceiver { public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
StringBuilder body = new StringBuilder();
StringBuilder number = new StringBuilder();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] _pdus = (Object[]) bundle.get("pdus");
SmsMessage[] message = new SmsMessage[_pdus.length];
for (int i = 0; i < _pdus.length; i++) {
message[i] = SmsMessage.createFromPdu((byte[]) _pdus[i]);
}
for (SmsMessage currentMessage : message) {
body.append(currentMessage.getDisplayMessageBody());
number.append(currentMessage.getDisplayOriginatingAddress());
}
String smsBody = body.toString();
String smsNumber = number.toString();
Toast.makeText(context, "号码:"+smsNumber+"\n内容:"+smsBody, Toast.LENGTH_SHORT).show();
}
} }
}
10-08 07:43:08.401: ERROR/AndroidRuntime(579): Uncaught handler: thread main exiting due to uncaught exception
10-08 07:43:08.432: ERROR/AndroidRuntime(579): java.lang.RuntimeException: Unable to instantiate receiver com.java.wjd.android.SmsReceiverToast: java.lang.ClassNotFoundException: com.java.wjd.android.SmsReceiverToast in loader dalvik.system.PathClassLoader@44d8f8c8
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2616)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.app.ActivityThread.access$3100(ActivityThread.java:119)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.os.Handler.dispatchMessage(Handler.java:99)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.os.Looper.loop(Looper.java:123)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at java.lang.reflect.Method.invokeNative(Native Method)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at java.lang.reflect.Method.invoke(Method.java:521)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at dalvik.system.NativeStart.main(Native Method)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): Caused by: java.lang.ClassNotFoundException: com.java.wjd.android.SmsReceiverToast in loader dalvik.system.PathClassLoader@44d8f8c8
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2609)
10-08 07:43:08.432: ERROR/AndroidRuntime(579): ... 10 more
注册:
<receiver android:name="SmsReceiverToast">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
权限:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>