android messages desktop - Android - Récepteur de diffusion SMS




5 Answers

android.provider.Telephony.SMS_RECEIVED a un T majuscule, et le tien dans le manifeste ne l'est pas.

Veuillez garder à l'esprit que cette action d' Intent n'est pas documentée.

mac pc

J'ai essayé d'obtenir this programme pour fonctionner mais jusqu'ici n'ayant aucune chance. Je ne peux pas trouver où je me trompe. Je ne suis pas sûr si quelque chose ne va pas avec le code, ou le débogage.

J'essaie d'être averti si un nouveau SMS arrive.

Voici mon programme:

package Technicaljar.SMSBroadcastReceiver;

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

public class SMSBroadcastReceiver extends BroadcastReceiver {

        private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
        private static final String TAG = "SMSBroadcastReceiver";

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

Et le fichier manifeste:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="Technicaljar.SMSBroadcastReceiver"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" >
        <receiver android:name=".SMSBroadcastReceiver">
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECEIVED"></action>
            </intent-filter>
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
</manifest> 

J'envoie des SMS via Telnet, et je ne peux voir aucun message reçu dans le logcat. Voici mon logcat du moment de l'installation.

D/AndroidRuntime(  478): 
D/AndroidRuntime(  478): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
D/AndroidRuntime(  478): CheckJNI is ON
D/AndroidRuntime(  478): --- registering native functions ---
D/AndroidRuntime(  478): Shutting down VM
D/dalvikvm(  478): Debugger has detached; object registry had 1 entries
I/AndroidRuntime(  478): NOTE: attach of thread 'Binder Thread #3' failed
D/Mms:app (  220): getSmsNewMessageNotificationInfo: count=14, first addr=12345, thread_id=4
D/dalvikvm(  151): GC_EXPLICIT freed 391 objects / 22552 bytes in 65ms
D/dalvikvm(  220): GC_EXPLICIT freed 926 objects / 44840 bytes in 73ms

Ainsi, le SMS semble être reçu par l'émulateur, mais il semble que les intentions ne soient pas déclenchées. Qu'est-ce que je fais mal ici? Après l'installation, dois-je en quelque sorte «démarrer» ce récepteur? Parce que quand j'installe, je reçois

 [2010-11-07 21:24:41 - SMSBroadcastReceiver] No Launcher activity found!
[2010-11-07 21:24:41 - SMSBroadcastReceiver] The launch will only sync the application package on the device!

Donc je me demande si quelque chose ne va pas ici.




Notez également que l'application Hangouts empêche actuellement mon BroadcastReceiver de recevoir des messages SMS. J'ai dû désactiver la fonctionnalité SMS dans l'application Hangouts (Paramètres-> SMS-> Activer SMS), avant que mon SMS BroadcastReceived ne commence à être renvoyé.

Edit: Il semble que certaines applications vont abandonnerBroadcast () sur l'intention qui empêchera d'autres applications de recevoir l'intention. La solution consiste à augmenter l'attribut android:priority dans la balise intent-filter :

    <receiver android:name="com.company.application.SMSBroadcastReceiver" >
        <intent-filter android:priority="500">
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

Voir plus de détails ici: Activer la prise en charge de SMS dans Hangouts 2.0 casse le BroadcastReceiver de SMS_RECEIVED dans mon application




intent.getAction().equals(SMS_RECEIVED)

Je l'ai essayé avec succès.




Votre récepteur de diffusion doit spécifier android:exported="true" pour recevoir les émissions créées en dehors de votre propre application. Mon récepteur de diffusion est défini dans le manifeste comme suit:

<receiver
    android:name=".IncomingSmsBroadcastReceiver"
    android:enabled="true"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

Comme indiqué ci-dessous, exporté = "true" est la valeur par défaut, donc vous pouvez omettre cette ligne. Je l'ai laissé pour que les commentaires de la discussion aient un sens.




android.provider.telephony.SMS_RECEIVED n'est pas correct car la téléphonie est une classe et elle devrait être capitale comme dans android.provider.Telephony.SMS_RECEIVED




Related