2014-12-11 3 views
0

В моем приложении Activity A использует startActivityForResult для отправки RecognizerIntent. Можно ли сказать, что он возвращает результаты деятельности B, не возвращаясь через Activity A?Как сделать RecognizerIntent начать разное, если это было начато?

+0

Я играл вокруг с PedingIntent, но не могли заставить его работать. – Kay

ответ

1

PendingIntent s не предназначены для того, чтобы результаты передавались обратно вызывающему абоненту, так что это не так.

Если ActivityB позади ActivityA в backstack, просто сделать это:

ActivityA { 
    @Override 
    public void onActivityResult (int requestCode, int resultCode, Intent data) { 
     setResult(resultCode, data); 
     finish(); 
    } 
} 

Это будет проходить в ActivityB любые данные RecognizerIntent активность отсылается обратно ActivityA.

Если ActivityB отдельная активность, что вы хотите, чтобы начать, когда RecognizerIntent активность завершена:

ActivityA { 
    @Override 
    public void onActivityResult (int requestCode, int resultCode, Intent data) { 
     Intent intent = new Intent(this, ActivityB.class); 
     intent.putExtras(data); 
     startActivity(intent); 
    } 
} 

Это начнет ActivityB из ActivityA, передавая данные через как пучок, который можно получить с помощью getIntent().get___Extra(String key)

+0

благодарим вас за то, что вы нашли время, но ваш ответ был именно тем, что я имел в виду (и рабочим кодом), когда я спросил «не возвращаясь через Activity A» – Kay

0

Использование PendingIntent вы можете нажать на результаты деятельности Б без возврата к A:

в активность А:

Intent activityIntent = new Intent(this, ActivityB.class); 
PendingIntent resPendingIntent = PendingIntent.getActivity(this, 0, activityIntent, 0); 

Intent speechRecIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
speechRecIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
speechRecIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
speechRecIntent.putExtra(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT, resPendingIntent); 


PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, speechRecIntent, 0); 
    try { 
    pendingIntent.send(); 
} catch (PendingIntent.CanceledException e) { 
    e.printStackTrace(); 
} 

Тогда в активности B, вы получите получить результаты в этом OnCreate():

Intent intent = getIntent(); 
if(intent.hasExtra(RecognizerIntent.EXTRA_RESULTS); 
ArrayList<String> speechRecResults = intent.getStringArrayList(RecognizerIntent.EXTRA_RESULTS); 
+0

. Я начинаю его без просмотра как startActivity или startActivityForResult? – Kay

+0

Вам не обязательно. Вы вызываете речевой рек. активность, вызвав pendingIntent # send. Я отредактировал свой ответ –

+0

Применение шаблона выше к моему коду приводит к сбою приложения с помощью «com.google.android.wearable.gmsclient.WearableException: sendRpcAsync не удалось: Status {statusCode = неизвестный код состояния: 4000, разрешение = null } «Исключение. – Kay

Смежные вопросы