从我的应用程序短信广播

时间:2012-03-06 21:47:06

标签: java android

我想从我的应用发送短信广播。在我看到这篇文章之前,我认为不可能。

http://blog.dev001.net/post/14085892020/android-generate-incoming-sms-from-within-your-app

我按照作者给出的指示。然而,作者没有包括GsmAlphabet片。他确实提供了源的URL,并简要总结了您需要调整的内容。我没有成功。我试过联系他,但他说他不再在他的电脑上有代码了。我创建了一个新类并粘贴在源代码中。我用过我的包裹。我将Exceptions改为泛型。我用Character.toString修复了一些char字符串问题。有一些String.Empty()错误,我改为等于(“”)。我注释了中心SmsMessageBase部分b / c它显示错误,似乎被包含,并没有与作者的功能提取的内容联系起来。我将由资源“R”填充的数组 - 整数切换到新的int [0] ...因为这看起来像是http://source-android.frandroid.com/frameworks/base/core/res/res/values/config.xml中的值。当我运行它时,我没有任何错误......似乎没有任何事情发生。

然后大约一天后我发现Handcent说我的通知栏里有几条新消息。他们来自我的测试号码,但在查看时他们说“格式无效”。通知清除后,它们没有显示在收件箱中。

我希望有人可能有GsmAlphabet片,所以我可以看到我的错误。我已经花了很多时间在这上面,我希望我可以让它发挥作用。有人在stackoverflow中略微提到了这一点:

Permission denial on BroadCast SMS intent

我使用Android 2.3.3进行了测试。

2 个答案:

答案 0 :(得分:0)

你可以找到GsmAlphabet here

答案 1 :(得分:0)

GsmAlphabet链接在上面。您复制EncodeException。它完美无缺,但我发现在Android4.1中它们会更改GsmAlphabet,因此它不会运行。如果您对GsmAlphabet使用Android2.2,它仍可在Android3.0

中使用

编辑:另一种解决方案是使用反射来访问

try {
            String sReflectedClassName = "com.android.internal.telephony.GsmAlphabet";
            Class cReflectedNFCExtras = Class.forName(sReflectedClassName);
            Method stringToGsm7BitPacked = cReflectedNFCExtras.getMethod(
                    "stringToGsm7BitPacked", new Class[] { String.class });
            stringToGsm7BitPacked.setAccessible(true);
            byte[] bodybytes = (byte[]) stringToGsm7BitPacked.invoke(null,
                    body);
            bo.write(bodybytes);
        } catch (Exception e) {
        }