Xamarin BroadcastReceiver OnReceive GetResultExtras 为空

问题描述 投票:0回答:1

我正在使用 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

}

}

}

我希望你能帮助我。问候。

我希望结果返回不为空。

xamarin
1个回答
0
投票

如果您想通过

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");
© www.soinside.com 2019 - 2024. All rights reserved.