从特定号码接收短信时启动应用程序

时间:2010-03-24 05:01:52

标签: android sms

我想开始申请从特定号码接收短信。 我正在尝试使用onMessageWaitingIndicatorChanged(boolean mwi){}方法但是 我正在挣扎。 那么,有谁在那里帮我详细? 谢谢

2 个答案:

答案 0 :(得分:5)

您需要为android.provider.Telephony.SMS_RECEIVED注册广播接收器。然后,接收方可以检查SMS的号码并开始适当的活动。

所以,你需要:

  • uses-permission添加android.permission.RECEIVE_SMS到您的清单
  • 在manfiest中的<application/>元素中声明广播接收器:

    <receiver android:name=".YourReceiverName"> 
        <intent-filter> 
            <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
        </intent-filter> 
    </receiver>
    
  • 创建接收器类,扩展IntentReceiver

  • onReceiveIntent中,您可以通过调用Telephony.Sms.Intents.getMessagesFromIntent()并传递您提供的意图来获取相关消息。
  • 如果该号码与您想要的号码匹配,则可以通过拨打startActivity
  • 开始一项活动

答案 1 :(得分:0)

这是我的onReceive()方法,它有效:)

public void onReceive( Context context, Intent intent ) {
        // get incoming message
        Bundle extras = intent.getExtras();

        String messages = "";

        // if message available, go on
        if ( extras != null ) {
            // get the array of the message
            Object[] smsExtra = (Object[]) extras.get( "pdus" );

            // loop through the number of available messages
            for ( int i = 0; i < smsExtra.length; ++i ) {
                // create smsmessage from raw pdu
                SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);

                // retrieve contents of message
                String body = sms.getMessageBody().toString();
                String address = sms.getOriginatingAddress();

                // only accept messages from specified number             
                if(address.equals(0000)){
                             // store the message to database
                    storeToDatabase( contentResolver, sms );
                        // stop message from getting to default app
                    this.abortBroadcast(); 
                }
            }

        }

    }