我正在使用 Visual Studio 2022 和 Xamarin 编写 Android 应用程序,发现 OnReceive 方法没有收到任何消息。我遵循了一些我发现的例子,但它不起作用我使用的代码如下:
公共类MainActivity:AppCompatActivity {
protected override void OnCreate(Bundle savingInstanceState) { 意图意图 = new Intent(RecognizerIntent.ActionGetLanguageDetails); SendOrderedBroadcast(intent, null, new LanguageDetailsChecker(), null, Result.Ok, null, null); }
}
公共类LanguageDetailsChecker:BroadcastReceiver {
公共覆盖无效OnReceive(上下文上下文,意图意图) {
Bundle results = GetResultExtras(true);
if (results.ContainsKey(RecognizerIntent.ExtraSupportedLanguages))
{
Some code
}
}
}
我希望你能帮助我。问候。
我希望结果返回不为空。
如果您想通过
GetResultExtras(true);
的方法OnReceive
从LanguageDetailsChecker
获取数据,则需要在发送广播时设置Bundle
参数。
请参考以下代码:
private void Button_Click(object? sender, EventArgs e)
{
Intent intent = new Intent(RecognizerIntent.ActionGetLanguageDetails);
//method 2
intent.PutExtra("mykey","test_value");
Bundle bundle = new Bundle();
bundle.PutString("key", "bundle_string");
//see the last parameter
SendOrderedBroadcast(intent, null, new LanguageDetailsChecker(), null, Result.Ok, null, bundle);
}
然后我们就可以接收到传递过来的数据了:
[BroadcastReceiver(Enabled = true, Exported = false)]
[IntentFilter(new[] { RecognizerIntent.ActionGetLanguageDetails })]
public class LanguageDetailsChecker : BroadcastReceiver
{
public override void OnReceive(Context? context, Intent? intent)
{
if (intent == null)
return;
Bundle bundle = GetResultExtras(true);
if (bundle == null)
return;
string stringvalue = bundle.GetString("key");
//method 2
String value = intent.GetStringExtra("mykey");
}
}
注:
您也可以使用以下代码传递数据
intent.PutExtra("mykey","test_value");
并获取
OnReceive
的方法 BroadcastReceiver
的数据,如下所示:
String value = intent.GetStringExtra("mykey");