Android SMS Receiver не работает - PullRequest
0 голосов
/ 14 июня 2011

Я новичок в программировании Android, пожалуйста, помогите мне в решении проблемы.

Мой код для получения смс не работает.

файл манифеста

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

</application>
<uses-permission android:name="android.permission.SEND_SMS">
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS">
</uses-permission>

пока код java

package com.android.SMS;


import android.os.Bundle;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import  android.telephony.*;
import android.telephony.gsm.SmsMessage;
import android.util.Log;

import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver
{

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


}

Пожалуйста, помогите мне в решении проблемы. Я застрял в этом со вчерашнего дня, и я не вижу никаких проблем в коде.

Ответы [ 3 ]

1 голос
/ 11 января 2012
package com.google.android;

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

public class SMSReceiver extends BroadcastReceiver {    
    @Override /** This line is important, as you have not overriden the original method*/
    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();
        }
    }
}

Надеюсь, это поможет вам.

1 голос
/ 26 июня 2012

Вот что у меня сейчас работает.Код, который я предоставляю, используется для блокировки входящих текстовых сообщений, но вы можете легко изменить его, включив только область, в которой он только предупреждает вас о входящих сообщениях и больше не обрабатывает их.

SmsReceiver.java

package com.android.SMS;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SmsReceiver extends BroadcastReceiver {

public static int MSG_TPE=0;
private String getAddress;
public void onReceive(Context context, Intent intent) { 
    String MSG_TYPE=intent.getAction();
        if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) {
            Toast received = Toast.makeText(context,"SMS Received: "+MSG_TYPE , Toast.LENGTH_LONG);
            received.show();

                Bundle bundle = intent.getExtras();
                Object messages[] = (Object[]) bundle.get("pdus");
                SmsMessage smsMessage[] = new SmsMessage[messages.length];
                for (int n = 0; n < messages.length; n++) {
                    smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
                }

                    getAddress = smsMessage[0].getOriginatingAddress();
                    // Filter incoming messages
                    if(getAddress.equals("APPROVEDPHONENUMBER")) {
                        Toast approved = Toast.makeText(context,"Approved SMS from: " + smsMessage[0].getOriginatingAddress(), Toast.LENGTH_LONG);
                        approved.show();
                            // Message is approved and let through
                    } else {
                        Toast blocked = Toast.makeText(context,"Blocked SMS from: " + smsMessage[0].getOriginatingAddress(), Toast.LENGTH_LONG);
                        blocked.show();
                            // Message is blocked
                            abortBroadcast();
                    }
                    // End filter
                        for(int i=0;i<8;i++) {
                            System.out.println("Blocking SMS");
                        }

        }

}

}

Это код, который обнаруживает входящее сообщение

if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")) {
        Toast received = Toast.makeText(context,"SMS Received: "+MSG_TYPE , Toast.LENGTH_LONG);
        received.show();
}

AndroidManifest.xmlРАЗРЕШЕНИЯ:

<uses-feature android:name="android.hardware.telephony" /> 
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

БЛОК ПРИЛОЖЕНИЯ:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >


    <service android:name=".MyService" android:enabled="true"/>
     <receiver android:name="SmsReceiver">
            <intent-filter android:priority="2147483647">
                <action android:name="android.provider.Telephony.SMS_SENT"/>
            </intent-filter>
     </receiver>
    <service android:name=".MyServiceSentReceived" android:enabled="true"/>
         <receiver android:name="SmsReceiver">
                <intent-filter android:priority="2147483645">
                    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
                </intent-filter>
         </receiver>

</application>

Важно разместить блоки обслуживания и приемника внутри вашего основного блока «приложения», как показано в коде выше.

0 голосов
/ 19 октября 2011

удалить эту строку.import android.telephony.gsm.SmsMessage;

, пожалуйста, убедитесь, что SmsMessage является обязательным классом под "android.telephony".

Это может вам помочь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...