我想做个功能就是收到短信时,调用Toast这个类显示收到短信了,这个该怎么做啊

解决方案 »

  1.   

    通过广播接收做吧,当手机收到信息时会广播出去android.provider.Telephony.SMS_RECEIVERD 好像是这个,不对的话 你在查查吧
      

  2.   

    public class SmsReceiverToast extends BroadcastReceiver {
    @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"/>
      

  3.   


    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();
                }
            }    }
        
    }
      

  4.   


    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
      

  5.   

    SmsReceiverToast.java单独写一个类AndroidManifest.xml中注册并添加权限
    注册:
    <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"/>