これは私が自分自身と戦ってきたことの1つです。多くの関数が @HIDE アノテーションでマークされたことは事実です。
しばらく調査した結果、Reflection を使用して SIM メッセージを読み取る隠しメソッドを利用できることに気付きました。Java で Reflection を調べることができます。
非表示/内部メソッドを使用する場合、これらのメソッドが存在するか、既存の Android プラットフォーム (バージョン) 間で同じ動作をするかは保証されないことに注意してください。
以下のパッケージをインポートします
import android.telephony.SmsMessage;
import java.lang.reflect.Method;
以下は試してみるためのサンプルコードです。とにかくうまくいきました。
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;
}
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.6_r2/android/telephony/SmsManager.java#SmsManager.getAllMessagesFromIcc%28を参照してください。サンプル コードで呼び出される、使用されている android の組み込みクラスとメソッドの詳細については、%29を参照してください。