Android - l'Interrogation de la SMS ContentProvider?
Je suis actuellement enregistrer un contenu observateur sur l'URI suivante "content://sms/" pour écouter les messages entrants et sortants envoyés.
Cela semble fonctionner ok et j'ai aussi essayé de supprimer de la base de données sms mais je ne peux que supprimer la totalité d'un filetage à partir de l'URI suivante "content://sms/conversations/"
Voici le code que j'utilise pour que
String url = "content://sms/";
Uri uri = Uri.parse(url);
getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler));
}
class MyContentObserver extends ContentObserver {
public MyContentObserver(Handler handler) {
super(handler);
}
@Override public boolean deliverSelfNotifications() {
return false;
}
@Override public void onChange(boolean arg0) {
super.onChange(arg0);
Log.v("SMS", "Notification on SMS observer");
Message msg = new Message();
msg.obj = "xxxxxxxxxx";
handler.sendMessage(msg);
Uri uriSMSURI = Uri.parse("content://sms/");
Cursor cur = getContentResolver().query(uriSMSURI, null, null,
null, null);
cur.moveToNext();
String protocol = cur.getString(cur.getColumnIndex("protocol"));
if(protocol == null){
Log.d("SMS", "SMS SEND");
int threadId = cur.getInt(cur.getColumnIndex("thread_id"));
Log.d("SMS", "SMS SEND ID = " + threadId);
Cursor c = getContentResolver().query(Uri.parse("content://sms/outbox/" + threadId), null, null,
null, null);
c.moveToNext();
int p = cur.getInt(cur.getColumnIndex("person"));
Log.d("SMS", "SMS SEND person= " + p);
//getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadId), null, null);
}
else{
Log.d("SMS", "SMS RECIEVE");
int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id"));
getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null);
}
}
}
Cependant je veux être en mesure d'obtenir la recipricant et le texte du message à partir du Contenu du SMS Fournisseur, quelqu'un peut me dire comment faire cela?
Et aussi comment faire pour supprimer un seul message à la place de tout un thread?
J'ai fait quelques progrès sur ce en 1.5 mais j'ai couru sur 1.6 et le contenu de mon observateur d'arrêts de travail, dans la version 1.5 de son mis en place pour "content://sms/", mais doit-il être quelque chose de différent pour la 1.6?
Un bon article sur Android SMS méthodes: mobdev.olin.edu/mobdevwiki/FrontPage/Tutorials/SMS%20Messaging
Bonjour Donal, j'ai vu votre question lors de la recherche d'une solution pour mon problème. En fait, je veux savoir sur le code que vous avez posté avant la déclaration de classe. Ces codes, qui sont l'appartenance à l'extérieur de la classe ou quoi? Par ailleurs, si vous avez résolu votre problème, pouvez-vous me guider un peu. je suis l'aide d'Android 2.2 et mon problème est assez similaire à la vôtre.
Un bon article sur Android SMS méthodes: mobdev.olin.edu/mobdevwiki/FrontPage/Tutorials/SMS%20Messaging
Bonjour Donal, j'ai vu votre question lors de la recherche d'une solution pour mon problème. En fait, je veux savoir sur le code que vous avez posté avant la déclaration de classe. Ces codes, qui sont l'appartenance à l'extérieur de la classe ou quoi? Par ailleurs, si vous avez résolu votre problème, pouvez-vous me guider un peu. je suis l'aide d'Android 2.2 et mon problème est assez similaire à la vôtre.
OriginalL'auteur Donal Rafferty | 2010-04-06
Vous devez vous connecter pour publier un commentaire.
Cela a déjà été discuté.
Pour lire des SMS à partir du fournisseur de Contenu vérifier:
- android-1-5-lecture-sms-messages
Cochez cette threads:
À propos de votre commentaire disant que vous êtes la suppression d'un thread entier au lieu d'un seul sms:
Avez-vous essayé ce code?
J'ai juste édité ma réponse.
Grâce Macarse, certaines sont intéressantes et des extraits de code, il y
J'ai fait quelques progrès sur ce en 1.5 mais j'ai couru sur 1.6 et le contenu de mon observateur d'arrêts de travail, dans la version 1.5 de son mis en place pour "content://sms/", mais doit-il être quelque chose de différent pour la 1.6?
pas sûr, mais je suppose que vous pouvez vérifier cela: developer.android.com/intl/fr/resources/articles/...
OriginalL'auteur Macarse
L'adresse de colonne contient le numéro de téléphone de l'expéditeur du sms.
Utilisez le curseur.getString(curseur.getColumnIndex("adresse")) pour tirer le numéro de téléphone comme une Chaîne de caractères. Pop un curseur sur le contenu://sms et de les trier par date, par ordre décroissant, obtenez le message le plus récent. Vous devrez attendre pour le nouveau message pour entrer à la table-autrement vous extraire des informations à partir le mauvais message. Dans un incomingSMS broadcastReceiver, utilisez une boucle while, dans un fil de discussion, les bureaux de vote pour le curseur.getCount() pour changer. Puis, après la boucle while curseur.moveToFirst sera le nouveau message.
Par exemple:
Ensuite obtenir l'adresse de l'expéditeur du sms:
Cette boucle va interrompre le thread jusqu'à ce que le nouveau message arrive. Vous pouvez également utiliser un contentObserver, mais cette boucle est simple et ne nécessite pas d'inscription, annulation d'inscription, et une classe distincte.
Franchement je pense que c'est plus rapide à tirer l'adresse et le corps du message directement à partir de la pdu de l'entrée de l'intention. De cette façon, vous n'avez pas à attendre pour le message entrer à la table pour obtenir l'adresse et le corps. Le Android classe SmsMessage a une variété de méthodes utiles.
OriginalL'auteur Noah Seidman