Android - SMS récepteur de Radiodiffusion
J'ai essayé d'obtenir cette programme de travail, mais jusqu'à présent avoir pas de chance. Je ne trouve pas où je fais de mal. Je ne suis pas sûr si il ya quelque chose de mal avec le code, ou de débogage.
J'essaie d'être informé 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>
Je suis l'envoi de SMS par le biais de Telnet, et je ne vois pas l'Intention messages reçus dans le logcat. Voici mon logcat à partir 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
De sorte que le SMS, semble être reçus par l'émulateur, mais ressemble à la pas les intentions sont de tir.
Ce que je fais mal ici? Après l'installation, je dois en quelque sorte "démarrer" de ce récepteur?
Parce que quand je l'ai installer, j'obtiens
[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!
Alors je me demandais si quelque chose ne va pas ici.
- Je suis en train de faire quelque chose de similaire ICI!!! stackoverflow.com/questions/14452808/...
- N'êtes-vous pas censé utiliser
intent.getAction().equals(SMS_RECEIVED)
au lieu deintent.getAction() == SMS_RECEIVED
Vous devez vous connecter pour publier un commentaire.
android.provider.Telephony.SMS_RECEIVED
dispose d'un capitalT
, et le vôtre dans le manifeste ne pas.S'il vous plaît garder à l'esprit que ce
Intent
action n'est pas documentée.CalendarContract
). Certaines de ces choses qu'elles ferment (par exemple, Gmail fournisseur de contenu).J'ai essayé votre code et constaté qu'il ne fonctionnait pas.
J'ai dû changer
à
Maintenant ça fonctionne. C'est juste un problème avec java vérification de l'égalité.
Noter également que l'application Hangouts va actuellement de bloquer mon BroadcastReceiver à partir de la réception de messages SMS. J'ai dû désactiver la fonctionnalité SMS dans l'application Hangouts (Paramètres->SMS->Activer SMS), avant que mon SMS BroadcastReceived commencé à se faire licencier.
Edit: Il semble que certaines applications abortBroadcast() sur l'intention qui permettra d'éviter d'autres applications à partir de la réception de l'intention. La solution est d'augmenter la
android:priority
attribut dans laintent-filter
tag:Voir plus de détails ici: Activation de la prise en charge SMS dans Hangouts 2.0 rompt le BroadcastReceiver de SMS_RECEIVED dans mon application
intent.getAction().equals(SMS_RECEIVED)
J'ai essayé avec succès.
Votre récepteur de radiodiffusion doit spécifier
android:exported="true"
pour recevoir les émissions créées en dehors de votre propre application. Mon récepteur de radiodiffusion est défini dans le manifeste comme suit:Comme indiqué ci-dessous, exporté="true" est la valeur par défaut, de sorte que vous pouvez omettre cette ligne. J'ai laissé en sorte que la discussion des commentaires à faire sens.
Suis tombé sur ça aujourd'hui. Pour quelqu'un codage d'un SMS récepteur de nos jours, l'utilisation de ce code à la place de l'obsolète à l'OP:
Pour android 19+ vous pouvez l'obtenir dans
Telephony.Sms.Intents.SMS_RECEIVED_ACTION)
. Il y a plus dans leIntent
classe s qui 're la peine de chercherau
La mise à Jour du code est :
plus ancien code était :
La simple Syntaxe de code est :
J'ai rencontré ce genre de problème récemment. Si le code est correct, je ne tournent pas sur les autorisations dans les paramètres de l'application. Donc, toutes les autorisations n'a pas été réglé par défaut sur les émulateurs, de sorte que vous devriez faire vous-même.
android.provider.telephony.SMS_RECEIVED
n'est pas correcte parce que la Téléphonie est une classe et il convient de capital dansandroid.provider.Telephony.SMS_RECEIVED