Android KitKat (API 19) - Wie Sie schreiben-Nachrichten in SMS-Inhalte-Anbieter, ohne dass Sie von Nicht-Standard-App?

Ich versuche zum erstellen einer Android-app, schreibt Nachrichten in der sent-Box des Systems. Sollten diese Meldungen nicht gesendet werden über das GSM-Netz an den Empfänger, das ist die Idee nur zu schreiben, Sie in den Content-Provider Gesendet.

Jetzt habe ich diesen code:

Manifest-Datei

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

Java-Klasse

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);

Für ein Gerät mit einer API-version kleiner als 19, ist diese Umsetzung funktioniert gut. Für diese ältere sdk-Versionen, ist es nur notwendig, um Zugriff auf die Inhalte-Anbieter definiert durch die uri Inhalt://sms/gesendet.

Für die neueren sdk Versionen, das wird nicht funktionieren. Anscheinend, Android, änderte seinen Weg zum Umgang mit dem SMS-Modul in der KitKat-Version. Nach dem nächsten Artikel, werden nur die Standard-SMS-Anwendung schreiben können, und aktualisieren Sie die neue SMS Content-Provider (android.Anbieter.- Telefonie.Sms.Gesendet - die vorherigen Inhalt://sms/gesendet ist Sie auch nicht verfügbar):

Bedenkt man das Verhalten von dieser app, es macht keinen Sinn, um es der Standard-SMS-app. Diese app braucht nicht zu Lesen SMS-Nachrichten von dem content-provider und sollte nicht jede Nachricht von SmsManager.getDefault().sendTextMessage. Das einzige, was Sie tun sollten, ist, einige schreiben von Nachrichten in den Gesendet-Anbieter.

Verstehen Sie, es ist auch nicht akzeptabel und durchführbar ist und auf Anfrage dem Benutzer das ändern der Standard-app zu mir und dann gehen Sie zurück auf die Vorherige SMS-app, jedes mal, wenn es notwendig ist, eine Nachricht zu schreiben, in dem Gesendet wird (dies wird vorgeschlagen, in der "Beratung für SMS backup & restore apps" - Abschnitt in der Android-Entwickler Blogspot).

Nächsten Artikel zeigt einige Möglichkeiten zum einblenden der option OP_WRITE_SMS:

Leider, die nächste code-aufgehört zu arbeiten für 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);

Ich bin aus Lösungen um dieses problem zu überwinden.

  • Sollte man nicht die Ordner "gesendet" spiegeln nur die Nachrichten, die gesendet wurden (oder zumindest versucht), und nicht "fake" diejenigen, die bisher noch nicht?
InformationsquelleAutor supertreta | 2014-12-29
Schreibe einen Kommentar