因为项目要求,需要在安卓系统上实现短信截获的功能,用java实现的话网上一大堆,但不喜欢
java语言的风格,并且我主方向是c#,于是就用c#完成,网上找到了mono for Android,经过很多
的组件安装后能用了,接下来马上实现需求。
搞Android开发的人都知道有两种方式实现短信截获,
1、在manifest文件中注册
2、在程序开始时用代码注册
对比优缺点,发现第一种方法适合,于是就照第一种方法写代码,其实也就是复制文件中的代码,
但是很遗憾,复制过去短信收到后程序崩溃,
如上代码我觉得不行的主要原因是<receiver android:name=".smsReceive">里面的.smsReceive
不清楚是一种什么样的关系,毕竟我只是涉猎一点。改了很多都不行。于是在网上搜索,找了
很久。。。。。
这时我发现国内研究技术真是比较欠缺,博文也是引用过去引用过来的,有点气愤,于是到国外
相关技术论坛上找资料,如我所愿,找到了,发上地址
http://forums.xamarin.com/discussion/comment/24420/#Comment_24420
这里面就有我想要的东西。
国内的也有一份资料,还有一本此技术的书籍,但是都没有说如何截获短信,都是说怎么发送
短信,悲催呀,是自己不会吗?????
回归正题,找到的主要代码是
[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
[IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" }, Priority = (int)IntentFilterPriority.HighPriority)]
public class SMSReceiver : Android.Content.BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
InvokeAbortBroadcast();
}
}
不过这里没用manifest文件注册,还没验证是否效果相同。
说一下需要注意的地方,如果满足你想要的条件而不再分发广播到其他地方就要调用
InvokeAbortBroadcast();不是java中的abortBroadcast();这里面没有这个。还有可能
是我安卓模拟器配置问题,这个不能进行调试。大家都知道安卓系统的运行机制,程
序卡住了会提示关闭或者继续等待,然后InvokeAbortBroadcast();就不起作用了,
所以想看部分变量的信息就需要用通知栏,吐丝等方式,设置断点不能很好的达到效
果。