2012-03-09 62 views
0

我正在开发一个android应用程序,可以让人们通过我的应用程序发送和接收短信到一个唯一的号码。我可以发送短信,但它出现在INBOX消息框中!通过我的应用程序接收短信在android

我希望它出现在我的应用

我用Google搜索,发现这一点,但我不希望它出现在吐司消息,我希望它像什么应用程序在Android和如何保存所有的SMS从这个号码?

这是代码:

package net.learn2develop.SMSMessaging; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.gsm.SmsMessage; 
import android.widget.Toast; 

public class SmsReceiver extends BroadcastReceiver 
{ 
@Override 
    public void onReceive(Context context, Intent intent) 
    { 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length];    
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);     
      str += "SMS from " + msgs[i].getOriginatingAddress();      
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "\n";   
     } 
     //---display the new SMS message--- 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
    }       
} 
} 

回答

0

作为每:Can we delete an SMS in Android before it reaches the inbox?

传入的SMS消息广播 (android.provider.Telephony.SMS_RECEIVED)被递送作为 “ordered broadcast” - 含义你可以告诉系统哪个组件首先应该接收广播。

如果您在SMS侦听 上定义了android:priority属性,则会在 本机SMS应用程序之前收到通知。

此时,您可以cancel广播,阻止它从 传播到其他应用程序。

+0

所以我应该在我的清单中写'android.provider.Telephony.SMS_RECEIVED)然后它会出现在我的应用程序之前的本地收件箱? – user1257040 2012-03-09 12:06:27

+0

或还有其他事情我应该做? – user1257040 2012-03-09 12:06:44

+0

如何从这个号码保存所有的短信?当我把我的代码它只是收到一条短信,然后当我收到另一条短信第一个删除 – user1257040 2012-03-09 12:08:09

0

在你的清单,你应该有一些看起来像这样:

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

机器人:优先= “999”

在您的onReceive()方法中,第一行应该是abortBroadcast();。时间确实很重要,你会从意图中获得捆绑。

相关问题