2

文字我已經創建了一個排序的永久notification,我的目標是這樣谷歌語音從通知

1)用戶輕敲notification
2)Google Speech to Text activity啓動,並需要語音輸入
3)輸入被轉換爲文本,並開始一個新的活動,它顯示文本。

這裏就是我一直如此far--

NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this) 
      .setSmallIcon(android.R.drawable.ic_dialog_alert) 
      .setContentTitle("Tap for voice input") 
      .setContentText("Hi"); 

    Intent resultIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); 
    resultIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, 
      getString(R.string.speech_prompt)); 
    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(pendingIntent); 

    Notification notification = builder.build(); 
    notification.flags = Notification.FLAG_NO_CLEAR; 

    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this); 
    notificationManager.notify(0, notification); 

現在我知道我可以正常使用startActivityForResult(resultIntent, REQ_CODE_SPEECH_INPUT);,在我activity處理它處理識別Intent的結果。

但我必須通過pendingIntent我的意圖爲notification

我可以做到這一點嗎?

編輯1:

我就可以開始一個新的活動,然後打開語音谷歌語音提示,但我想轉換後的字符串要傳遞給我的活動開始之前,就像在一個額外的參數意圖...

+1

我認爲提供的答案最適合您的需求 - 否則,如果您想獲得更多技術,可以使用SpeechRecognizer類從服務獲取語音輸入,然後將參數傳遞給活動一旦完成。 – brandall

回答

2

使用「隱形」Activity作爲中介。有可能沒有UI的活動,例如參見Emanuel Moecklin的this SO post。所以,你可以修改你的應用程序的流程是這樣的:

  • 用戶點擊的通知
  • Activity沒有UI開始,並呼籲startActivityForResult()以獲得STT轉換
  • 谷歌語音到文本Activity開始結果並採取語音輸入
  • 輸入被轉換爲文本並且發送作爲結果發送到UI少Activity
  • ...這又啓動一個新的Activity其示出該文本。