这是我一直在与自己争斗的一件事。确实很多功能都是用@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