2010-07-05 9 views
3

Je travaille sur une application SMS pour Android, qui doit sans aucun doute envoyer des SMS (! Allez comprendre;)Android: Envoi d'un SMS (en utilisant la boîte d'envoi)

Maintenant, je sais qu'il ya beaucoup de sources sur le net qui décrivent l'utilisation de SmsManager pour envoyer des SMS ... Mais, apparemment, en utilisant cette méthode, les SMS ne sont pas stockés dans le dossier "SENT" ... ce qui est une exigence de base pour une application SMS. Comment ajouter une entrée (d'un message) dans la "Boîte d'envoi", afin qu'elle soit envoyée (et stockée automatiquement dans le dossier SENT) .... Quelles seraient les valeurs des champs "_id , threadid, read, status, type, service_center "(Attributs de la table des messages) ??

D'autres alternatives sont également les bienvenues. :) Merci à l'avance ...

Répondre

1

Mais, apparemment, lorsque vous utilisez cette méthode , les SMSes ne sont pas stockés dans le « SENT » Dossier ... qui est en quelque sorte une exigence de base pour une application SMS .

Le concept d'un dossier «SENT» est une caractéristique d'une application, pas du système d'exploitation. Si vous souhaitez créer votre propre application client SMS, créez votre propre dossier "SENT" en tant que caractéristique de cette application. Vous savez quels messages vous envoyez, de sorte que vous pouvez les stocker où vous le souhaitez (par exemple, base de données SQLite).

Si vous souhaitez envoyer des messages SMS et les faire apparaître dans le dossier "SENT" du client SMS choisi par l'utilisateur, n'utilisez pas SmsManager. Au lieu de cela, utilisez ACTION_SENDTO et que le message soit envoyé par le client SMS choisi par l'utilisateur, comme démontré par this sample project.

+0

J'ai exploré cette option, mais je J'aime utiliser le dossier interne "SENT" ... Ainsi, même si l'utilisateur peut utiliser mon application, ses messages sont toujours visibles dans l'application de messagerie intégrée. – st0le

+0

Je ne peux pas utiliser l'ACTION_SENDTO, il doit utiliser mon interface graphique ... il y a des fonctionnalités supplémentaires que mon application prend en charge ... – st0le

+0

@ st0le: il n'y a pas une seule "application de messagerie intégrée" dans Android. HTC Sense en a un. MOTOBLUR en a un. D'autres couches OEM (par exemple, Rachael de Sony Ericsson) ont probablement les leurs. De plus, il y a celui qui fait partie du projet open source et apparaîtra sur les appareils Google Experience (par exemple, Nexus One). – CommonsWare

4

je cherchais un travail autour de cette question. Ajoutez les lignes de code suivantes après l'envoi du sms ... cela fera une entrée dans la boîte d'envoi de l'application sms natif

ContentValues values = new ContentValues(); 

values.put("address", number); 
values.put("body", desc); 

getApplicationContext().getContentResolver().insert(Uri.parse("content://sms/sent"), values); 

je voudrais obtenir l'aide de ppl qui pourrait dire comment utiliser ce fournisseur de contenu faire une entrée pour plusieurs récepteurs ... Merci ..

0

Au moins sur 6.0 et 7.0, l'application système com.android.phone est chargée de stocker les messages envoyés par d'autres applications. Malheureusement, cette fonctionnalité est cassée par certains fabricants et c'est pourquoi nous ne voyons pas les messages envoyés.

Cela fonctionne cependant sur AVD. Voir la méthode persistSentMessageIfRequired() dans com.android.internal.telephony.SMSDispatcher.

Seule cette application ou l'application SMS sélectionnée par défaut dispose d'une autorisation d'écriture pour le fournisseur de contenu SMS. Lorsque vous l'envoyez en utilisant l'application SMS, il appelle directement insert(). Lorsque vous utilisez SmsManager dans votre application, l'application système com.android.phone est en quelque sorte notifiée, effectue l'envoi et stocke le message envoyé.Voici le callstack (je ne l'ai pas creuser plus loin):

at android.os.Handler.obtainMessage(Handler.java:293) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendSmsByPstn(GsmSMSDispatcher.java:291) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendSms(GsmSMSDispatcher.java:274) 
    at com.android.internal.telephony.SMSDispatcher.sendRawPdu(SMSDispatcher.java:999) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.sendText(GsmSMSDispatcher.java:198) 
    at com.android.internal.telephony.ImsSMSDispatcher.sendText(ImsSMSDispatcher.java:206) 
    at com.android.internal.telephony.IccSmsInterfaceManager.sendTextInternal(IccSmsInterfaceManager.java:452) 
    at com.android.internal.telephony.IccSmsInterfaceManager.sendText(IccSmsInterfaceManager.java:393) 
    at com.android.internal.telephony.UiccSmsController.sendTextForSubscriber(UiccSmsController.java:136) 
    at com.android.internal.telephony.ISms$Stub.onTransact(ISms.java:201) 
    at android.os.Binder.execTransact(Binder.java:565) 

Après l'envoi de SMS, les messages d'application d'un message Handler à lui-même:

 at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1343) 
    at com.android.providers.telephony.SmsProvider.insertInner(SmsProvider.java:618) 
    at com.android.providers.telephony.SmsProvider.insert(SmsProvider.java:442) 
    at android.content.ContentProvider$Transport.insert(ContentProvider.java:264) 
    at android.content.ContentResolver.insert(ContentResolver.java:1274) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.persistSentMessageIfRequired(SMSDispatcher.java:1445) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.persistOrUpdateMessage(SMSDispatcher.java:1476) 
    at com.android.internal.telephony.SMSDispatcher$SmsTracker.onSent(SMSDispatcher.java:1537) 
    at com.android.internal.telephony.SMSDispatcher.handleSendComplete(SMSDispatcher.java:638) 
    at com.android.internal.telephony.SMSDispatcher.handleMessage(SMSDispatcher.java:274) 
    at com.android.internal.telephony.gsm.GsmSMSDispatcher.handleMessage(GsmSMSDispatcher.java:108) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6077) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)