发送短信PDU模式在Android中 [英] Send sms in pdu mode in Android
本文介绍了发送短信PDU模式在Android中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Android的新的。
我想在PDU模式发送短信,我发现这code,但有些类并不在Android Studio中(粗线)的支持。谁能帮我?
私人无效sendsmsBypdu(字符串phoneNumber的,字符串消息){ INT大小;
域F; Log.d(TAG,检索电话实例...);
ContactsContract.CommonDataKinds.Phone手机= ** PhoneFactory.getDefaultPhone(); ** / *获取IccSmsInterfaceManager * /
Log.d(TAG,检索SmsInterfaceManager ...);
** IccSmsInterfaceManager ismsm = getIccSmsInterfaceManager(); ** 尝试{
Log.d(TAG,检索mDispatcher ...);
** F = IccSmsInterfaceManager.class.getDeclaredField(mDispatcher); **
f.setAccessible(真);
SmsManager sms_smg =(SmsManager)f.get(ismsm); Log.d(TAG,格式化0级短信...);
字节[] B =新的字节[0];
SmsMessage.SubmitPdu的PDU = SmsMessage.getSubmitPdu(NULL,phoneNumber的,消息,假的); / *改变类0类* /
大小=(INT)pdus.en codedMessage [2];
大小=(尺寸/ 2)+(大小%2);
pdus.en codedMessage [尺寸+ 5 =(字节)0XF0; / *发送原始PDU * /
Log.d(TAG通过sendRawPdu()...发送短信);
尝试
{
/ *的Android 2.2 - > 4.0。* * /
方法M = SmsManager.class.getDeclaredMethod(sendRawPdu,b.getClass(),b.getClass(),PendingIntent.class,PendingIntent.class);
m.setAccessible(真);
m.invoke(sms_smg,pdus.en codedScAddress,pdus.en codedMessage,NULL,NULL);
}
赶上(NoSuchMethodException E)
{
/ *的Android 4.1.2 * /
方法M = SmsManager.class.getDeclaredMethod(sendRawPdu,b.getClass(),b.getClass(),PendingIntent.class,PendingIntent.class,为String.class);
m.setAccessible(真);
m.invoke(sms_smg,pdus.en codedScAddress,pdus.en codedMessage,NULL,NULL,phoneNumber的);
}
Log.d(TAG,短信发送); }赶上(SecurityException异常五){
Log.e(TAG,异常:安全);
e.printStackTrace();
}
赶上(NoSuchFieldException E){
Log.e(TAG,异常:字段mDispatcher没有找到!);
e.printStackTrace();
}赶上(抛出:IllegalArgumentException五){
Log.e(TAG,异常:非法参数!);
e.printStackTrace();
}赶上(IllegalAccessException E){
Log.e(TAG,异常:非法访问!);
e.printStackTrace();
}赶上(NoSuchMethodException E){
Log.e(TAG,异常:sendRawPdu()未找到!);
e.printStackTrace();
}赶上(的InvocationTargetException E){
Log.e(TAG,异常:不能调用sendRawPdu());
e.printStackTrace();
}
}
解决方案
我发现我的答案。更多关于这一点,你可以阅读嘘短信
SmsManager SM = SmsManager.getDefault(); //获取方法sendRawPdu
字节[] = BB新的字节[1];
SmsMessage.SubmitPdu =的MyPDU SmsMessage.getSubmitPdu(NULL,PNO,味精,真正的);
大小=(INT)mypdu.en codedMessage [2];
大小=(尺寸/ 2)+(大小%2);
mypdu.en codedMessage [尺寸+ 5 =(字节)0XF0; (TAG,dumpHexString(mypdu.en codedMessage,0,mypdu.en codedMessage.toString()长()))Log.d;
方法2 = SmsManager.class.getDeclaredMethod(sendRawPdu,bb.getClass(),bb.getClass(),PendingIntent.class,PendingIntent.class,boolean.class,boolean.class);
Log.d(成功,成功获得sendRawPdu); m2.setAccessible(真); INT长度= msg.length();
数=长度/ 160;
INT M =长度160%;
如果(M!= 0){
算上++;
}
m2.invoke(SM,mypdu.en codedScAddress,mypdu.en codedMessage,sentPI,deliveredPI,通过Boolean.valueOf(真),通过Boolean.valueOf(真));
Log.d(成功,成功发送邮件);
}赶上(SecurityException异常五){
// TODO自动生成catch块
e.printStackTrace();
}赶上(抛出:IllegalArgumentException五){
// TODO自动生成catch块
e.printStackTrace(); }赶上(NoSuchMethodException E){
// TODO自动生成catch块
e.printStackTrace(); }赶上(IllegalAccessException E){
// TODO自动生成catch块
e.printStackTrace(); }赶上(的InvocationTargetException E){
// TODO自动生成catch块
e.printStackTrace();
}
I am new in Android. I want to send a sms in pdu mode and i found this code, but some class doesn't Support in android studio (Bold Lines). Can anyone help me ?
private void sendsmsBypdu(String phoneNumber,String message) {
int size;
Field f;
Log.d(TAG,"Retrieving phone instance ...");
ContactsContract.CommonDataKinds.Phone phone = **PhoneFactory.getDefaultPhone();**
/* Get IccSmsInterfaceManager */
Log.d(TAG,"Retrieving SmsInterfaceManager ...");
**IccSmsInterfaceManager ismsm = getIccSmsInterfaceManager();**
try {
Log.d(TAG,"Retrieving mDispatcher ...");
**f = IccSmsInterfaceManager.class.getDeclaredField("mDispatcher");**
f.setAccessible(true);
SmsManager sms_smg = (SmsManager)f.get(ismsm);
Log.d(TAG, "Formatting class 0 SMS ...");
byte[] b = new byte[0];
SmsMessage.SubmitPdu pdus = SmsMessage.getSubmitPdu(null, phoneNumber, message,false);
/* change class to Class 0 */
size = (int)pdus.encodedMessage[2];
size = (size/2) + (size%2);
pdus.encodedMessage[size+5] = (byte)0xF0;
/* send raw pdu */
Log.d(TAG,"Sending SMS via sendRawPdu() ...");
try
{
/* Android 2.2 -> 4.0.* */
Method m = SmsManager.class.getDeclaredMethod("sendRawPdu", b.getClass(), b.getClass(), PendingIntent.class, PendingIntent.class);
m.setAccessible(true);
m.invoke(sms_smg, pdus.encodedScAddress, pdus.encodedMessage, null, null);
}
catch(NoSuchMethodException e)
{
/* Android 4.1.2 */
Method m = SmsManager.class.getDeclaredMethod("sendRawPdu", b.getClass(), b.getClass(), PendingIntent.class, PendingIntent.class, String.class);
m.setAccessible(true);
m.invoke(sms_smg, pdus.encodedScAddress, pdus.encodedMessage, null, null, phoneNumber);
}
Log.d(TAG, "SMS sent");
} catch (SecurityException e) {
Log.e(TAG, "Exception: Security !");
e.printStackTrace();
}
catch (NoSuchFieldException e) {
Log.e(TAG, "Exception: Field mDispatcher not found !");
e.printStackTrace();
} catch (IllegalArgumentException e) {
Log.e(TAG, "Exception: Illegal Argument !");
e.printStackTrace();
} catch (IllegalAccessException e) {
Log.e(TAG, "Exception: Illegal access !");
e.printStackTrace();
} catch (NoSuchMethodException e) {
Log.e(TAG, "Exception: sendRawPdu() not found !");
e.printStackTrace();
} catch (InvocationTargetException e) {
Log.e(TAG, "Exception: cannot invoke sendRawPdu() !");
e.printStackTrace();
}
}
解决方案
I found my Answer. More About this you can read in Hush SMS
SmsManager sm = SmsManager.getDefault();
// Get method "sendRawPdu"
byte[] bb = new byte[1];
SmsMessage.SubmitPdu mypdu = SmsMessage.getSubmitPdu(null, pNo, msg, true);
size = (int) mypdu.encodedMessage[2];
size = (size / 2) + (size % 2);
mypdu.encodedMessage[size + 5] = (byte) 0xF0;
Log.d(TAG, dumpHexString(mypdu.encodedMessage, 0, mypdu.encodedMessage.toString().length()));
Method m2 = SmsManager.class.getDeclaredMethod("sendRawPdu", bb.getClass(),bb.getClass(),PendingIntent.class,PendingIntent.class,boolean.class,boolean.class);
Log.d("success", "success getting sendRawPdu");
m2.setAccessible(true);
int length = msg.length();
count = length / 160;
int m = length % 160;
if (m != 0) {
count++;
}
m2.invoke(sm, mypdu.encodedScAddress,mypdu.encodedMessage,sentPI,deliveredPI, Boolean.valueOf(true),Boolean.valueOf(true));
Log.d("success", "success sending message");
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这篇关于发送短信PDU模式在Android中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文