安卓ߝ监听传入的短信
我正在尝试创建一个应用程序来监视传入的短信,并通过传入的短信启动一个程序,它也应该从短信中读取内容。
工作流程:
- 短信发送到Android设备
- 自可执行应用程序
- 读取短信信息
I am trying to create an application for monitoring incoming SMS messages, and launch a program via incoming SMS, also it should read the content from the SMS.
Workflow:
- SMS sent to Android device
- self executable Application
- Read the SMS information
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
注意:在清单文件中添加 BroadcastReceiver -
添加此权限:
Note: In your manifest file add the BroadcastReceiver-
Add this permission:
请注意,在某些设备上,如果意图过滤器中没有 android:priority="1000",您的代码将无法运行:
这里有一些优化:
注意:
该值必须是整数,例如“100”。数字越大,优先级越高。默认值为 0。该值必须大于 -1000 且小于 1000。
这里是一个链接。
Note that on some devices your code wont work without android:priority="1000" in intent filter:
And here is some optimizations:
Note:
The value must be an integer, such as "100". Higher numbers have a higher priority. The default value is 0. The value must be greater than -1000 and less than 1000.
Here's a link.
@Mike M. 和我发现了一个已接受答案的问题(请参阅我们的评论):
基本上,如果我们每次不连接多部分消息,则通过 for 循环是没有意义的:
请注意,我们只是设置
msgBody
到消息相应部分的字符串值,无论我们位于哪个索引,这使得循环遍历 SMS 消息的不同部分的整个点毫无用处,因为它只会被设置为最最后的索引值。相反,我们应该使用+=
,或者如 Mike 所说,StringBuilder
:总而言之,这是我的 SMS 接收代码的样子:
只是把这个答案放在那里以防其他人有同样的困惑。
@Mike M. and I found an issue with the accepted answer (see our comments):
Basically, there is no point in going through the for loop if we are not concatenating the multipart message each time:
Notice that we just set
msgBody
to the string value of the respective part of the message no matter what index we are on, which makes the entire point of looping through the different parts of the SMS message useless, since it will just be set to the very last index value. Instead we should use+=
, or as Mike noted,StringBuilder
:All in all, here is what my SMS receiving code looks like:
Just putting this answer out there in case anyone else has the same confusion.
接受的答案是正确的,并且适用于旧版本的 Android,其中 Android 操作系统在应用程序安装时请求权限,但是在较新版本的 Android 上,它不能立即工作,因为当应用程序需要该功能时,较新的 Android 操作系统会在运行时请求权限。因此,为了使用接受的答案中提到的技术在较新版本的 Android 上接收短信,程序员还必须实现在运行时检查并请求用户权限的代码。在这种情况下,权限检查功能/代码可以在应用程序第一个活动的 onCreate() 中实现。只需在第一个活动中复制并粘贴以下两个方法,然后在 onCreate() 末尾调用 checkForSmsReceivePermissions() 方法。
The accepted answer is correct and works on older versions of Android where Android OS asks for permissions at the app install, However on newer versions Android it doesn't work straight away because newer Android OS asks for permissions during runtime when the app requires that feature. Therefore in order to receive SMS on newer versions of Android using technique mentioned in accepted answer programmer must also implement code that will check and ask for permissions from user during runtime. In this case permissions checking functionality/code can be implemented in onCreate() of app's first activity. Just copy and paste following two methods in your first activity and call checkForSmsReceivePermissions() method at the end of onCreate().
如果有人像我一样在 Xamarin Android 上参考如何执行相同的功能(使用收到的短信读取 OTP):
将此代码添加到您的 AndroidManifest.xml 文件中:
然后在您的 Android 项目中创建您的 BroadcastReveiver 类。
在 Android 项目的 MainActivity 类中注册此 BroadcastReceiver 类:
If someone referring how to do the same feature (reading OTP using received SMS) on Xamarin Android like me :
Add this code to your AndroidManifest.xml file :
Then create your BroadcastReveiver class in your Android Project.
Register this BroadcastReceiver class in your MainActivity class on Android Project:
如果您想处理打开的活动的意图,您可以使用 PendintIntent (下面的完整步骤):
manifest:
onNewIntent:
permissions:
In case you want to handle intent on opened activity, you can use PendintIntent (Complete steps below):
manifest:
onNewIntent:
permissions:
感谢@Vineet Shukla(已接受的答案)和@Ruchir Baronia(在已接受的答案中发现了问题),以下是
Kotlin
版本:添加权限:
在 AndroidManifest 中注册 BroadcastReceiver:
添加 BroadcastReceiver 的实现:
有时事件会触发两次,因此我添加
mLastTimeReceived = System.currentTimeMillis()
Thank to @Vineet Shukla (the accepted answer) and @Ruchir Baronia (found the issue in the accepted answer), below is the
Kotlin
version:Add permission:
Register BroadcastReceiver in AndroidManifest:
Add implementation for BroadcastReceiver:
Sometime event fires twice so I add
mLastTimeReceived = System.currentTimeMillis()
从现在开始,如果您不是默认的短信应用程序,则几乎不可能发布具有 android.permission.RECEIVE_SMS 权限的应用程序。谷歌提供了一个新的短信捕获工具==> 使用 SMS Retriever API 进行自动短信验证
Since some time now, it becomes nearly impossible to publish an app with the android.permission.RECEIVE_SMS permission, if you are not a default sms app. Google provide a new tool for SMS catching ==> Automatic SMS Verification with the SMS Retriever API
Kotlin 上的广播实现:
注意:在清单文件中添加 BroadcastReceiver -
添加此权限:
broadcast implementation on Kotlin:
Note: In your manifest file add the BroadcastReceiver-
Add this permission:
如果您使用 Kotlin,这里是一个示例
权限
在这个示例中,我将收到的相同短信发布到外部 API 中,以便我可以在浏览器中查看它们,您可以在以下存储库中获取所有源代码:
< a href="https://github.com/heridev/sms-mobile-hub" rel="nofollow noreferrer">https://github.com/heridev/sms-mobile-hub
如果您愿意安装所有后端 API 和前端您可以访问官方下载部分 https://smsforall.org
If you are using Kotlin, here is an example
And the permissions
In this example I'm posting the same SMS received into an external API so I can see them in a browser, you can get all the source code in the following repository:
https://github.com/heridev/sms-mobile-hub
and if you want to install all the backend API and frontend application you can visit the official download section at https://smsforall.org