从我的应用程序短信广播

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

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

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

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

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

BroadCast短信意图的权限被拒绝

我接受了Android 2.3.3的测试。

你可以在这里找到GsmAlphabet

GsmAlphabet链接在上面。 您复制EncodeException 。 它的工作完美但我发现在Android4.1他们改变GsmAlphabet所以它不运行。 如果您使用GsmAlphabet for Android2.2它仍可在Android3.0

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

 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) { }