在SIM*问短信
我需要访问存储在SIM上的短信(不是在电话上)。在SIM*问短信
根据grepcode(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/telephony/SmsManager.java),android telephony.SmsManger API包含一个公共函数“getAllMessagesFromIcc()”,并表明它存在于2.1中,但是官方的android SDK不支持这样的函数。
为什么这种差异?
这个功能正是我所需要的。如果它不存在,我如何才能读取SIM卡上当前的SMS消息?
我没有找到这个帖子在*(Retrieving the SMS Messages from the SIM card on with android),SEEMS做我想做的,但它实际上扩展了“广播接收器”,我解释为捕获传入的消息,不读取已存储在SIM卡上的消息。
感谢您的任何帮助。
找到了答案。 Android中有许多公共功能都标有“(@HIDE)”标签。这些函数从android SDK中被剥离,以阻止(很好地防止)普通程序员使用它们。
当然,引进的挑战实在太多了一些程序员...
欲了解更多信息,请参见: http://devmaze.wordpress.com/2011/01/18/using-com-android-internal-part-1-introduction/
不幸的是,这似乎是目前的手机(三星Galaxy S的,LG,2012)删除了他所引用的文件,因此不再支持上述过程。
如果可以访问串行设备(的Android seems to have/dev/smd0
可用),那么可以用下面的AT命令读取从SIM SMS消息:
AT+CPMS="SM","SM"
AT+CMGF=0
AT+CMGL=4
以上是PDU模式中,使用以下文字模式
AT+CPMS="SM","SM"
AT+CMGF=1
AT+CMGL="ALL"
这是我一直在与自己争斗的一件事。确实很多功能都是用@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为所使用的机器人内置的类和方法的细节在示例代码中调用。
这个解决方案也适用于Android冰淇淋三明治 – 2013-05-28 09:46:07
如果用户没有SIM卡,你会怎么做? – 2012-04-26 18:46:37
在用户没有SIM的情况下使用此应用程序是一种例外情况。该应用程序将指示一个错误。 – user1359314 2012-04-27 11:57:43
好吧,仅供参考,有大量的用户没有模拟人生,但你可能知道这个 – 2012-04-27 13:13:21