因为对短信读写操作的api 被隐藏了 , 我们须要使用《Java反射机制的学习》一文中提到的反射的方法得到隐藏API 。
这有一个用例大家能够下载http://zhushou.360.cn/detail/index/soft_id/1608427
http://download.youkuaiyun.com/detail/qgy92320/8967551
android写sim卡短信
/***
* 1) byte[] smsc : 短信服务中心的地址,个人觉得在拷贝到SIM卡过程中能够为空。
* 2) byte[] pdu : 中文翻译是协议数据单元,这个參数最为重要,一会我们会做具体地解释说明。
* 3) int status : 短信存储在Icc卡上的状态。有4种状态,1是已读,3是未读,5是已发送。7是未发送。
* @param smsc
* @param pdu
* @param status
*/
public boolean writeSMStoIcc(byte[] smsc,byte[] pdu,int status){
// mKeyboardHelper = new ReflectionInternal(this,"android.telephony.SmsManager");
//调用类,声明类,mKeyboardView。mPasswordEntry,为须要传递的參数
// mKeyboardHelper.setInt("copyMessageToIcc", 0);
boolean flag = false;
SmsManager newSmsManager = SmsManager.getDefault();
try {
Class smsManagerClass = Class.forName("android.telephony.SmsManager");
Method localMethod = smsManagerClass.getMethod("copyMessageToIcc",new Class[]{byte[].class,byte[].class,Integer.TYPE});
Object[] arrayList = new Object[3];
arrayList[0] = smsc;
arrayList[1] = pdu;
arrayList[2] = status;
try {
flag = ((Boolean)localMethod.invoke(newSmsManager, arrayList)).booleanValue();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
Log.e("NoSuchMethodException","NoSuchMethodException :"+ e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException ex) {
// TODO Auto-generated catch block
Log.e("ClassNotFoundException","ClassNotFoundException :"+ ex.getMessage());
ex.printStackTrace();
}
return flag;
}
android 读sim卡短信
public ArrayList<SmsMessage> getSmsList(){
ArrayList<SmsMessage> list = new ArrayList<SmsMessage>();
SmsManager newSmsManager = SmsManager.getDefault();
try {
Class<?> smsManagerClass = Class.forName("android.telephony.SmsManager");
Method localMethod = smsManagerClass.getMethod("getAllMessagesFromIcc",null);
try {
list = (ArrayList<SmsMessage>)localMethod.invoke(newSmsManager, null);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
Log.e("NoSuchMethodException","NoSuchMethodException :"+ e.getMessage());
e.printStackTrace();
} catch (ClassNotFoundException ex) {
// TODO Auto-generated catch block
Log.e("ClassNotFoundException","ClassNotFoundException :"+ ex.getMessage());
ex.printStackTrace();
}
return list;
}