/ / Zugriff auf SMS-Nachrichten auf der SIM-Karte - Android, SMS, SIM-Karte

Zugriff auf SMS auf SIM - Android, SMS, SIM-Karte

Ich muss auf SMS-Nachrichten zugreifen, die auf der SIM-Karte gespeichert sind (NICHT auf dem Telefon).

Nach grepcode ( http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/telephony/SmsManager.java ), die Android-Telefonie.SmsManger-API enthält eine öffentliche Funktion "getAllMessagesFromIcc ()" und gibt an, dass es diese Version 2.1 gab. Das offizielle Android-SDK unterstützt jedoch keine solche Funktion.

Warum die Diskrepanz?

Diese Funktion würde genau das tun, was ich brauche. Wenn es nicht existiert, wie kann ich eine SMS-Nachricht lesen, die sich derzeit auf der SIM befindet?

Ich habe diesen Post auf stackoverflow gefunden ( Abrufen der SMS-Nachrichten von der SIM-Karte mit Android ), was SEEMS tun soll, was ich will, aber es erweitert tatsächlich "Broadcast Receiver", den ich als das Abfangen eingehender Nachrichten interpretiere, nicht das Lesen bereits auf der SIM-Karte gespeicherter Nachrichten.

Danke für jede Hilfe.

Antworten:

2 für die Antwort № 1

Antwort gefunden Es gibt eine Reihe von öffentlichen Funktionen in Android, die mit einem "(@HIDE)" - Tag gekennzeichnet sind. Diese Funktionen werden vom Android-SDK gestrichen, um deren Verwendung durch den durchschnittlichen Programmierer zu entmutigen (gut, fast zu verhindern).

Natürlich ist die vorgestellte Herausforderung einfach zu viel etwas Programmierer ...

Weitere Informationen finden Sie unter: http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/

Leider scheint es, als hätten aktuelle Handys (ein Samsung Galaxy S und ein LG, 2012) die Datei entfernt, auf die er sich bezieht, so dass der obige Vorgang nicht mehr unterstützt wird.


2 für die Antwort № 2

Dies ist eine Sache, mit der ich mit mir selbst gekämpft habe. Es stimmt, dass viele Funktionen mit der @HIDE-Annotation markiert wurden.

Nach einiger Zeit stellte ich fest, dass ich die verborgene Methode zum Lesen von SIM-Nachrichten mit Reflection nutzen konnte. Sie können Reflection in Java nachschlagen.

bitte beachten Sie Sie können mit verborgenen / internen Methoden nicht garantieren, dass diese Methoden auf den vorhandenen Android-Plattformen (Versionen) vorhanden sind oder dasselbe Verhalten aufweisen.

Importieren Sie die folgenden Pakete

import android.telephony.SmsMessage;
import java.lang.reflect.Method;

Unten ist ein Beispielcode zum Ausprobieren, der für mich trotzdem funktioniert hat.

public ArrayList<SmsMessage> getSimCardMessages() {

// this implementation was recorded to work for android 1.6
// it was tested Ok on android 2.3

ArrayList<SmsMessage> list = new ArrayList<SmsMessage>();

try {
Class<?> smsMgrClass = Class.forName("android.telephony.SmsManager");
Method getSMSMgr = smsMgrClass.getMethod("getDefault");
Object smsDefaultInstance = getSMSMgr.invoke(null);
Method getMessages = smsMgrClass.getMethod("getAllMessagesFromIcc");
@SuppressWarnings("unchecked")
list = (ArrayList<SmsMessage>) getMessages.invoke(smsDefaultInstance);

Log.d("sms manager", "length: " + list.size());
} catch (Exception e) {
e.printStackTrace();
}
return list;
}

Vielleicht möchten Sie nachschlagen http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.6_r2/android/telephony/SmsManager.java#SmsManager.getAllMessagesFromIcc%28%29 Weitere Informationen zu der verwendeten Android-Klasse und -Methode, die im Beispielcode aufgerufen wird.


0 für die Antwort № 3

Wenn Sie auf ein serielles Gerät zugreifen können (Android scheint zu haben /dev/smd0 verfügbar), können Sie mit den folgenden AT-Befehlen SMS-Nachrichten von der SIM-Karte lesen:

AT+CPMS="SM","SM"
AT+CMGF=0
AT+CMGL=4

Der obige ist der PDU-Modus. Verwenden Sie den folgenden für den Textmodus

AT+CPMS="SM","SM"
AT+CMGF=1
AT+CMGL="ALL"