Je veux démarrer une application sur la réception de SMS à partir d'un numéro particulier. Je l'essaie avec la méthode onMessageWaitingIndicatorChanged (boolean mwi) {} mais j'ai des difficultés. alors, quelqu'un là pour m'aider en détail? MerciDémarrez l'application sur la réception de SMS à partir du numéro particulier
2
A
Répondre
5
Vous devez enregistrer un récepteur de diffusion pour android.provider.Telephony.SMS_RECEIVED
. Le destinataire peut alors vérifier le numéro du SMS et démarrer votre activité selon le cas.
Ainsi, vous devrez:
- Ajouter un
uses-permission
pourandroid.permission.RECEIVE_SMS
à votre manifeste Déclarer un récepteur de diffusion dans votre élément
<application/>
dans le manfiest:<receiver android:name=".YourReceiverName"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
Créez la classe de réception, en prolongeant
IntentReceiver
.- Dans
onReceiveIntent
, vous pouvez obtenir les messages pertinents en appelantTelephony.Sms.Intents.getMessagesFromIntent()
et en transmettant l'intention que vous avez reçue. - Si le numéro correspond à celui que vous voulez, vous pouvez alors commencer une activité en appelant
startActivity
0
ici est ma méthode onReceive()
, cela fonctionne :)
public void onReceive(Context context, Intent intent) {
// get incoming message
Bundle extras = intent.getExtras();
String messages = "";
// if message available, go on
if (extras != null) {
// get the array of the message
Object[] smsExtra = (Object[]) extras.get("pdus");
// loop through the number of available messages
for (int i = 0; i < smsExtra.length; ++i) {
// create smsmessage from raw pdu
SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
// retrieve contents of message
String body = sms.getMessageBody().toString();
String address = sms.getOriginatingAddress();
// only accept messages from specified number
if(address.equals(0000)){
// store the message to database
storeToDatabase(contentResolver, sms);
// stop message from getting to default app
this.abortBroadcast();
}
}
}
}
Chris thanks 4 ur réponse Ther est un problème dans Telephony.Sms.Intents.getMessagesFromIntent() Peut-être itz déprécié, donc Wat à utiliser à la place .. – MAkS
Vous pouvez utiliser 'SmsMessage.createFromPdu'. Un tableau de PDU est disponible à partir de l'ensemble que vous pouvez obtenir à partir de l'intention - 'byte [] [] pdus = (byte [] []) intention.getExtras(). Get (" pdus ");' ou – Chris