编辑:此问题已解决 - 在此发布解决方案,以防将来有人需要或任何人可以建议更好的方法。我从清单中删除了意图部分,并在我的SmsReceiver类中设置了BroadcastReceiver。现在它可以工作了。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Util;
using Android.Telephony;
namespace dummyAndroid
{
[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")]
[IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" })]
public class SmsReceiver : Android.Content.BroadcastReceiver
{
public static readonly string INTENT_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public override void OnReceive(Context context, Intent intent)
{
if (intent.Action == INTENT_ACTION)
{
StringBuilder buffer = new StringBuilder();
Bundle bundle = intent.Extras;
if (bundle != null)
{
Java.Lang.Object[] pdus = (Java.Lang.Object[])bundle.Get("pdus");
SmsMessage[] msgs;
msgs = new SmsMessage[pdus.Length];
for (int i = 0; i < msgs.Length; i++)
{
msgs[i] = SmsMessage.CreateFromPdu((byte[])pdus[i]);
Log.Info("SmsReceiver", "SMS Received from: " + msgs[i].OriginatingAddress);
Log.Info("SmsReceiver", "SMS Data: " + msgs[i].MessageBody.ToString());
}
Log.Info("SmsReceiver", "SMS Received");
}
}
}
}
}
我正在编写一个发送/接收短信的应用程序,通过SMS Manager已经实现了发送功能。
现在我想在Mono for Android中接收短信,但由于我是Android开发的新手,可能做错了什么!
我已经将以下内容添加到我的清单中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.me.dummyAndroid" android:versionCode="1" android:versionName="1">
<uses-sdk android:targetSdkVersion="8" />
<application
android:label="meAndroidSMS"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<receiver android:name=".SmsReceiver">
<intent-filter>
<action android:name=
"android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
</manifest>
接着,我创建了一个名为SmsReceiver.cs的新类,并将onReceive函数添加到其中,但是intent中似乎没有getExtras函数,根据我阅读的在线教程(http://www.techques.com/question/1-3542320/IPhone-Android-SMS-intercept-and-redirection-to-an-application),我需要这个函数。
namespace dummyAndroid
{
class SmsReceiver
{
public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
}
}
}
我知道在Android和MonoDroid方面,我可能有点力不从心,但也许有人能指点我一下!
var pdus = bundle.Get(“pdus”);
上我得到了null_Reference异常,实际上bundle中没有pdus
,我尝试使用pdu
,但下一行遇到了转换异常。 请告诉我我错在哪里,当获取交付状态时,我必须拥有接收方号码和消息,这对我非常重要。 - Mahdi Tahsildari