Récepteur de radiodiffusion de priorité - Seulement recevoir une émission de SMS App - ANDROID
Je suis en train de développer une application sms, je vais avoir de la difficulté à obtenir du sms reçu.
J'ai changé la priorité dans mon manifeste pour
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
DE RADIODIFFUSION DE CLASSE :
public class SMSReceiver extends BroadcastReceiver {
private final String ACTION_RECEIVE_SMS = "android.provider.Telephony.SMS_RECEIVED";
private SmsModel newSMS;
private static final String TAG = "SMSReceiver";
@Override
public void onReceive(Context mContext, Intent intent) {
Log.i("TEST","TEST");
/**
* RECEPTION SMS
*/
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
from = msgs[i].getOriginatingAddress();
content = msgs[i].getMessageBody().toString();
}
Log.d("FIRST BROADCAST RECIEVER", "##### incoming sms from : " + from);
}
this.context = context;
bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObj = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObj.length];
//getting SMS information from Pdu.
for (int i = 0; i < pdusObj.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);
}
for (SmsMessage currentMessage : messages) {
sender = currentMessage.getDisplayOriginatingAddress();
msg = currentMessage.getDisplayMessageBody();
Log.d("Sender::",sender);
Log.d("Msg::",msg);
}
//
if (intent.getAction().equals(ACTION_RECEIVE_SMS)) {
//RECUPERE SMS
bundle = intent.getExtras();
Object[] pdus = (Object[]) bundle.get("pdus");
//RECONSTRUIRE SMS
messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
if (messages.length > -1) {
//AFFECTE NUM_TEL + MSG + THREAD_ID
final String messageBody = messages[0].getMessageBody();
final String phoneNumber = messages[0]
.getDisplayOriginatingAddress();
int thread_id = ConversionFactory.getThreadIDfromNumber(phoneNumber);
//AJOUT SMS DANS BOITE DE RECEPTION ANDROID + RECUPERATION NOUVEAU ID SMS
ContentValues values = new ContentValues();
values.put("address", phoneNumber);
values.put("body", messageBody);
Uri uri = mContext.getContentResolver().insert(Uri.parse("content://sms/inbox"), values);
//SI LA THREAD EXISTE...
if(thread_id != -1)
{
//CREATION NOUVEAU SMS
newSMS = new SmsModel(Integer.parseInt(uri.getLastPathSegment()), thread_id, messageBody, phoneNumber, 0, System.currentTimeMillis(), "receieved");
//AJOUTE DANS LA CONVERSATION
AllConversations.getInstance().getConversation(thread_id).ListeSms.put(String.valueOf(Integer.parseInt(uri.getLastPathSegment())), newSMS);
//SI L'UTILISATEUR EST DANS LA CONVERSATION(ACTIVTY) DU NOUVEAU SMS
if(thread_id == ((VariablesService)mContext.getApplicationContext()).mScheduleMessage.getItem(0).getThreadId())
{
//AJOUT DANS LISTVIEW MESSAGE
((VariablesService)mContext.getApplicationContext()).mScheduleMessage.add(newSMS);
}
for (int i=0; i<((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getCount();i++) {
if (((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i).getThreadId() == thread_id)
{
((VariablesService)mContext.getApplicationContext()).mScheduleConversation.remove(((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i));
newSMS.setContactName(mContext, newSMS.getNumber());
((VariablesService)mContext.getApplicationContext()).mScheduleConversation.insert(newSMS, 0);
Log.i("ENTRER", ((VariablesService)mContext.getApplicationContext()).mScheduleConversation.getItem(i).getMessage());
}
}
//ENVOYER BROADCAST
Intent returnintent=new Intent("RECIEVE_INTENT_FROM_BROADCAST");
mContext.sendBroadcast(returnintent);
Log.i(TAG, newSMS.toString());
}
//VIBRATOR
Vibrator v;
v=(Vibrator)mContext.getSystemService(Context.VIBRATOR_SERVICE);
v.vibrate(1000);
}
XML
<receiver
android:name="com.application.reciever.SMSReceiver"
class="com.application.reciever.SMSReceiver" android:exported="true">
<intent-filter android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
LOGCAT:
11-17 11:49:08.570: I/MESSAGE(25588): Sending SMS !
11-17 11:49:08.590: I/ConversationActivity(25588): SMS Sent.
11-17 11:49:10.820: I/bcsms(25588): 3424 - 46 - tts - +33610030697 - 17-11-2012 - 1353149350823 - receieved
11-17 11:49:10.830: I/BROADCAST(25588): GOT THE INTENT
11-17 11:49:11.570: D/OpenGLRenderer(25588): Flushing caches (mode 1)
11-17 11:49:12.330: W/IInputConnectionWrapper(25588): showStatusIcon on inactive InputConnection
11-17 11:49:14.940: D/dalvikvm(25588): GC_CONCURRENT freed 293K, 8% free 8141K/8775K, paused 2ms+8ms
11-17 11:49:18.670: I/MESSAGE(25588): Sending SMS !
11-17 11:49:18.680: I/ConversationActivity(25588): SMS Sent.
11-17 11:49:21.860: D/OpenGLRenderer(25588): Flushing caches (mode 1)
11-17 11:49:22.120: W/IInputConnectionWrapper(25588): showStatusIcon on inactive InputConnection
Comme vous pouvez le voir je ne reçois pas le SMS deuxième dans le récepteur, des idées?
- publier vos BroadCastReceiver code.
- fait, la diffusion de la classe ajoutée
- avez-vous essayez de vous connecter que le BroadCastReciever est appelé ou pas?
- désolé le code dans l'émission a légèrement changé depuis que j'ai posé la question, je me suis connecté la nouvelle sms qui est créé lorsque j'ai reçu le sms => JOURNAL TAG => bcsms. la première fois qu'il le crée et pas la deuxième fois
Vous devez vous connecter pour publier un commentaire.
Je travaille également sur SMS Application basée...et je n'obtiens pas de problème...Son travail très bien.
voici le manifeste code :
Un ici est la façon de travailler dans SMSReceiver.class fichier :
Essayer cette..
à l'intérieur de votre SMS Récepteur de Radiodiffusion..
}
valeur de priorité doit être un entier. La valeur par défaut est de 0. La valeur doit être supérieure à -1000 et moins de 1000.
de définir la priorité de la valeur à 999. il va travailler pour votre code. et c'est la valeur la plus élevée.
Sms Go application est en cours d'exécution toujours sur le dos. Si vous voulez que votre application obtenir des sms, vous devez: 1 - choisissez la plus haute priorité 2 - exécution de récepteur de radiodiffusion à partir d'un service qui est en cours d'exécution en arrière-plan