Domanda

Sto cercando di scrivere una semplice applicazione che tenta di ricevere messaggi SMS e gestirli. Ho seguito diversi tutorial, ma sto da nessuna parte, quando mando uno SMS per l'emulatore, l'intento non sembra mai essere licenziato.

Qui è il mio intento:

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

ed ecco la mia 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>

Mi piacerebbe davvero apprezzare alcune linee guida con quello che sta andando male. Sto solo entrare in sviluppo Android, ma penso che ho la mia testa avvolta intorno (la maggior parte) esso. Durante il monitoraggio logcat dell'emulatore, gli eventi di registro non venire, e punti di interruzione di debug sono mai colpito, così ho la sensazione che sia da qualche parte nel mio filtro intento.

Io corro questo su Android 2.0.1.

È stato utile?

Soluzione

Oltre a risposta di Samuh (è necessario fare un confronto oggetto sulla corda azione, o semplicemente non fare nessun confronto ), nel file manifest che hai scritto male SMS_RECEIVED.

Altri suggerimenti

Credo che la vostra manifesta sembra a posto; il problema è con la linea:

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

Credo che dovrebbe essere: intent.getAction().equals(ACTION)

La speranza che aiuta ..

Il nome dell'azione sembra richiedere un capitale "T" in "Telefonia.

android.provider.Telephony.SMS_RECEIVED

Per variabili String non si deve confrontare con il simbolo ==, si dovrebbe confrontare con il metodo equals()

questo è sbagliato

intent.getAction() == SMS_RECEIVED) 

questo è giusto

intent.getAction().equals (SMS_RECEIVED)) 

Dal momento che la telefonia è deprecato (dal 1,0 credo), questo metodo non funziona più. Controlla questo tutorial se avete bisogno di una soluzione adeguata: http://mobiforge.com/developing/story/sms-messaging-android (Volevo solo notare che questo, dal momento che sono incappato in un sacco di tutorial che non funziona più)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top