這是我一直在與自己爭鬥的一件事。確實很多功能都是用@HIDE註釋標記的。
經過一段時間的研究,我發現我可以利用隱藏的方法使用反射來讀取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%29爲所使用的機器人內置的類和方法的細節在示例代碼中調用。
如果用戶沒有SIM卡,你會怎麼做? – 2012-04-26 18:46:37
在用戶沒有SIM的情況下使用此應用程序是一種例外情況。該應用程序將指示一個錯誤。 – user1359314 2012-04-27 11:57:43
好吧,僅供參考,有大量的用戶沒有模擬人生,但你可能知道這個 – 2012-04-27 13:13:21