Frage

Ich versuche eine einfache Anwendung zu schreiben, die versucht, SMS -Nachrichten zu empfangen und diese zu behandeln. Ich habe mehrere Tutorials gefolgt, aber ich komme nirgendwo hin, wenn ich einen SMS an den Emulator sende, scheint die Absicht nie gefeuert zu werden.

Hier ist meine Absicht:

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

Und hier ist mein 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>

Ich würde mich sehr schätzen, was schief geht. Ich komme gerade in Android -Entwicklung, aber ich denke, ich habe meinen Kopf (meistens) um eingewickelt. Während der Überwachung des Logcats des Emulators werden die Protokollereignisse nie auftauchen und Debugging -Haltepunkte werden nie getroffen. Ich habe also das Gefühl, dass es irgendwo in meinem Absichtsfilter liegt.

Ich betreibe das auf Android 2.0.1.

War es hilfreich?

Lösung

Zusätzlich zu Samuhs Antwort (Sie müssen einen Objektvergleich in der Aktionszeichenfolge durchführen oder einfach keinen Vergleich durchführen.) In Ihrer Manifestdatei haben Sie falsch geschrieben SMS_RECEIVED.

Andere Tipps

Ich denke, dein Manifest sieht in Ordnung aus. Das Problem ist mit der Zeile:

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

Ich denke, es sollte sein: intent.getAction().equals(ACTION)

Ich hoffe, das hilft..

Der Aktionsname scheint ein Kapital "t" in "Telefonie zu erfordern.

android.provider.Telephony.SMS_RECEIVED

Zum String Variablen, mit denen Sie nicht vergleichen sollten == Symbol, sollten Sie mit dem vergleichen mit equals() Methode

das ist falsch

intent.getAction() == SMS_RECEIVED) 

Dies ist richtig

intent.getAction().equals (SMS_RECEIVED)) 

Da die Telefonie veraltet ist (seit 1.0, denke ich), funktioniert diese Methode nicht mehr. Schauen Sie sich dieses Tutorial an, wenn Sie eine richtige Lösung benötigen:http://mobiforge.com/developing/story/sms-messaging-android(Ich wollte das nur bemerken, da ich auf viele Tutorials gestoßen bin, die nicht mehr funktionieren)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top