Android KitKat (API 19) - Comment écrire des messages en SMS Fournisseur de Contenu, sans les envoyer, à partir de la Non-Application par Défaut?

Je suis en train de créer une application Android qui écrit des messages Envoyés, Boîte de de la système. Ces messages ne doivent pas être envoyées sur le réseau GSM pour le destinataire, l'idée est seulement de les écrire dans l'Envoyé de Fournisseur de Contenu.

Pour l'instant, j'ai ce code:

Fichier Manifeste

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>

Classe Java

private final String SENT_SMS_CONTENT_PROVIDER_URI_OLDER_API_19 = "content://sms/sent";

ContentValues values = new ContentValues();
values.put("address", mNumber);
values.put("body", mMessage);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
  mContext.getContentResolver().insert(Telephony.Sms.Sent.CONTENT_URI, values);
else mContext.getContentResolver().insert(Uri.parse(SENT_SMS_CONTENT_PROVIDER_URI_OLDER_API_19), values);

Pour un appareil avec une version de l'API est inférieure à 19, cette application fonctionne très bien. Pour ces anciennes versions du sdk, il est seulement nécessaire pour l'accès au fournisseur de contenu défini par l'uri contenu://sms/envoyé.

Pour les nouvelles versions du sdk, ce n'est pas de travail. Apparemment, Android a changé sa façon de gérer les SMS module dans la version KitKat. Selon l'article suivant, seuls les SMS par défaut de l'application permet d'écrire et de mettre à jour le nouveau SMS Fournisseur de Contenu (android.fournisseur de.La téléphonie.Sms.Envoyé - le contenu précédent://sms/envoyé n'est également pas disponible):

Considérant le comportement de cette application, il n'est pas logique de faire tourner l'application SMS par défaut. Cette application n'a pas besoin de lire des messages SMS à partir du fournisseur de contenu et ne doivent pas envoyer de message par SmsManager.getDefault().sendTextMessage. La seule chose qu'il doit faire est d'écrire des messages Envoyés, Fournisseur.

Comme vous pouvez le comprendre, il n'est pas acceptable et possible de demander à l'utilisateur de modifier la valeur par défaut d'application de la mine, puis revenir à la précédente, application SMS, à chaque fois qu'il est nécessaire d'écrire un message de l'Envoyé (ce qui est suggéré dans la "Conseils pour SMS backup & restaurer apps" dans la section de Développeurs Android Blogspot).

Le prochain article révèle quelques moyens pour afficher l'option OP_WRITE_SMS:

Malheureusement, le code suivant arrêté de travailler pour Android 4.4.2:

Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.Settings");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra(":android:show_fragment", "com.android.settings.applications.AppOpsSummary");
startActivity(intent);

Je n'ai pas de solutions pour surmonter ce problème.

Ne pas le dossier envoyé reflètent uniquement les messages qui ont été envoyés (ou au moins tenté), et non pas "faux" ceux qui ne l'ont pas?

OriginalL'auteur supertreta | 2014-12-29