Question

Je suis en train d'écrire une application simple qui tente de recevoir des messages SMS et les manipuler. J'ai suivi plusieurs tutoriels mais je suis nulle part, quand j'envoie un SMS à l'émulateur, l'intention ne semble jamais se faire virer.

Voici mon intention:

package com.neocodenetworks.smsfwd;

import android.content.*;
import android.os.Bundle;
import android.telephony.*;
import android.util.Log;

public class SmsReciever extends BroadcastReceiver {
    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
    private static final String TAG = "smsfwd";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "Intent recieved: " + intent.getAction());

        if (intent.getAction() == SMS_RECEIVED) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Object[] pdus = (Object[])bundle.get("pdus");
                final SmsMessage[] messages = new SmsMessage[pdus.length];
                for (int i = 0; i < pdus.length; i++) {
                    messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                }
                if (messages.length > -1) {
                    Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
                    NetComm.SendMessage("me", messages[0].getOriginatingAddress(), messages[0].getMessageBody());
                }
            }
        }
    }
}

et voici mon AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.neocodenetworks.smsfwd"
        android:versionCode="1"
        android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true">
        <receiver android:name=".SmsReciever">
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECIEVED"></action>
            </intent-filter>
        </receiver>
    </application>
    <uses-sdk android:minSdkVersion="6" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest>

J'apprécierais vraiment quelques conseils avec ce qui se passe mal. Je suis juste dans le développement Android, mais je pense avoir ma tête enroulée autour de (la plupart) il. Bien que le suivi de logcat, les événements du journal ne viennent jamais, et des points d'arrêt de débogage de l'émulateur ne sont jamais touchés, donc j'ai le sentiment qu'il est quelque part dans mon filtre intention.

Je suis en ce sur Android 2.0.1.

Était-ce utile?

La solution

En plus de de réponse Samuh (vous devez faire une comparaison d'objet sur la chaîne d'action, ou tout simplement ne pas de comparaison ), dans votre fichier manifeste que vous avez mal orthographié SMS_RECEIVED.

Autres conseils

Je pense que votre manifeste semble correct; le problème est avec la ligne:

if (intent.getAction() == SMS_RECEIVED) {

Je pense qu'il devrait être: intent.getAction().equals(ACTION)

L'espoir qui aide ..

Le nom de l'action semble exiger un "T" majuscule dans « Téléphonie.

android.provider.Telephony.SMS_RECEIVED

Pour les variables de String vous ne devriez pas comparer avec le symbole de ==, vous devriez comparer avec la méthode equals()

est erroné

intent.getAction() == SMS_RECEIVED) 

est droite

intent.getAction().equals (SMS_RECEIVED)) 

La téléphonie est dépréciée (depuis la version 1.0, je pense), cette méthode ne fonctionne plus. Consultez ce tutoriel si vous avez besoin d'une solution appropriée: http://mobiforge.com/developing/story/sms-messaging-android (Je voulais juste noter, puisque je suis tombé sur beaucoup de tutoriels qui ne fonctionne plus)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top