发送短信PDU模式在Android中 [英] Send sms in pdu mode in Android

查看:692
本文介绍了发送短信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()...发送短信);
        尝试
        {
                / *的Andr​​oid 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)
        {
                / *的Andr​​oid 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆