在android中接收短信 - 意外停止

时间:2014-04-01 17:11:40

标签: android

你好朋友这是我用来接收短信的代码。收到短信后收到短信显示不幸丢失了。任何人都可以帮助我。

ReceivesmsActivity.java

                      public class ReceivesmsActivity extends Activity {
public TextView info;
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
             setContentView(R.layout.activity_receivesms);

            info = (TextView) findViewById(R.id.info);
     }

public class Receivesms extends BroadcastReceiver{
         @Override public void onReceive(Context context, Intent intent) {  
     try{ 
     Bundle pudsBundle = intent.getExtras();
     Object[] pdus = (Object[]) pudsBundle.get("pdus");
     SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]); 
     info.setText(messages.getMessageBody().toString());
     }catch(Exception e){
     Toast.makeText(context,e.toString(),Toast.LENGTH_LONG).show(); 
     }
    }
     }

这是此应用程序的清单文件

清单

                     <activity

        android:name="com.receivesms.ReceivesmsActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
       </activity>

       <receiver android:name=".Receivesms">
         <intent-filter>
             <action android:name="android.provider.Telephony.SMS_RECEIVED" />
         </intent-filter>
       </receiver>

1 个答案:

答案 0 :(得分:1)

可能需要这样做:

  public class ReceivesmsActivity extends Activity implements Handler.Callback {
    public TextView info;
    public Handler handler;
    private static final int SUCCESS = 0;
    private static final int FAILED  = 1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_receivesms);

        info = (TextView) findViewById(R.id.info);
        handler = ReceivesmsActivity.this;
 }


   @Override 
   public boolean handleMessage(Message message){

           switch(message.what){

           case SUCCESS:
               udpateUI(message);
            break;
           case FAILED: 

            // Maybe toast the user that you have not been able to receive or update UI
            break;

        } 
        return true;
   }

  // Updates the UI from the Activity, not the Broadcast Receiver
  public void updateUI(Message msg){
    info.setText(((SmsMessage) msg.obj).obtainMessageBody().toString());

  }


  // Since this is a service its not run on the UI thread, so can't update UI
  public class Receivesms extends BroadcastReceiver{
     @Override 
    public void onReceive(Context context, Intent intent) {  
     try{ 
            Bundle pudsBundle = intent.getExtras();
            Object[] pdus = (Object[]) pudsBundle.get("pdus");
            SmsMessage messages =SmsMessage.createFromPdu((byte[]) pdus[0]); 

             // the idea is get a reference to your activity
             // then send a message back to the Handler to update the UI
             handler.obtainMessage(SUCCESS, messages).sendToTarget();

      }catch(Exception e){
          Toast.makeText(context,e.toString(),Toast.LENGTH_LONG).show(); 
     }
}
 }