RecognizerIntent:如何将一个包添加到一个挂起的意图

我正在实施一个响应RecognizerIntent的活动。 除此之外,这个活动必须处理两个传入的附加信息,这些附加信息指定一个挂起的意图和它的 extras-bundle

  • EXTRA_RESULTS_PENDINGINTENT
  • EXTRA_RESULTS_PENDINGINTENT_BUNDLE

解释文档:

  • 如果您使用EXTRA_RESULTS_PENDINGINTENT提供PendingIntent ,结果将被添加到其捆绑中, PendingIntent将被发送到其目标。

  • 如果您使用EXTRA_RESULTS_PENDINGINTENT提供转发意向,则还可以使用EXTRA_RESULTS_PENDINGINTENT_BUNDLE为最终意向提供附加附加信息。 search结果将被添加到该捆绑,并且组合的捆绑将被发送到目标。

我一直在寻找示例代码来展示以下内容。

从捆绑中提取PendingIntent的最佳方式是什么?

我应该这样做:

 (PendingIntent) extras.getParcelable(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT) 

如何添加额外的PendingIntent的现有额外的一套?

如何启动修改的PendingIntent

Solutions Collecting From Web of "RecognizerIntent:如何将一个包添加到一个挂起的意图"

出于安全原因,您无法直接触摸PendingIntent的内容。 但是,当您发送PendingIntent时,您有机会根据原创者允许的内容来补充或修改其内容。

这是你想用来发送PendingIntent的方法:

http://developer.android.com/reference/android/app/PendingIntent.html#send(android.content.Context,int,android.content.Intent,android.app.PendingIntent.OnFinished,android.os.Handler)

您在此提供的意图是用于修改从PendingIntent发送的最终意图的数据。

可以修改的规则在这里:

http://developer.android.com/reference/android/content/Intent.html#fillIn(android.content.Intent,int)

请注意,默认情况下,创build一个PendingIntent时,发件人可以修改的唯一部分是额外的。 创build者可以通过标志来允许其他部分被修改,尽pipe这通常是不期望的。

我可能能够帮助你解决第二个问题,因为我在自己的应用程序中做了类似的事情。

为意图添加附加内容应该像调用putExtra()一样简单。 我已经做了这个通知。

Intent notificationIntent = new Intent(_context, MyActivity.class); notificationIntent.putExtra("SOME_ID", "VALUE");

这是启动我的应用程序的通知的一部分。 我后来读了额外的时候,我的活动恢复。

 Intent intent = getIntent(); Bundle extras = intent.getExtras(); if(extras !=null) { String value = extras.getString("SOME_ID"); if( value != null && value.equals( "VALUE" ) ) { //Value was found, do something } } 

希望这有助于一些。

这些是我目前对这些问题的答案。 它在许多Google应用程序(地图,文档,YouTube,听)中都是这样工作的,当您通过麦克风button执行search时,所有这些都将PendingIntent传递给RecognizerIntent 。 我不确定这是否是最好的(或者最一般的)做法。 任何意见,欢迎。

从捆绑中提取PendingIntent的最佳方式是什么?

 Parcelable extraResultsPendingIntentAsParceable = bundle.getParcelable(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT); if (extraResultsPendingIntentAsParceable != null) { if (extraResultsPendingIntentAsParceable instanceof PendingIntent) { mExtraResultsPendingIntent = (PendingIntent) extraResultsPendingIntentAsParceable; } else { // Report an error } } mExtraResultsPendingIntentBundle = bundle.getBundle(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT_BUNDLE); 

如何添加额外的PendingIntent的现有额外的一套?

在这里,我们只是创build一个新的意图,并把所有必要的额外的东西。

 if (mExtraResultsPendingIntentBundle == null) { mExtraResultsPendingIntentBundle = new Bundle(); } Intent intent = new Intent(); intent.putExtras(mExtraResultsPendingIntentBundle); // Unsure about the following line... // Should I use another name for the extra data (instead of SearchManager.QUERY) intent.putExtra(SearchManager.QUERY, speechRecognitionResult); 

如何启动修改的PendingIntent

我们发送PendingIntent给它新的意图(以新的附加)作为一个参数。

 try { mExtraResultsPendingIntent.send(this, 1234, intent); } catch (CanceledException e) { // Handle exception }