android - запустить действие другого приложения, чтобы получить его результат

У меня есть два приложения: A и B.

Из A я запускаю B для получения результата, используя следующий код:

Intent fmIntent = getPackageManager().getLaunchIntentForPackage("com.example.B");
fmIntent.putExtra("hello", "world");
startActivityForResult(fmIntent, REQUEST_TEST);

От B я делаю следующее:

getIntent().putExtra("completed", true);
setResult(RESULT_OK, getIntent());
finish();

Если я сделаю описанное выше для действия в том же приложении, оно будет работать должным образом.

Однако, поскольку это два разных приложения, я получаю пустое намерение без данных и неустановленный код результата. Как мне отредактировать приведенное выше, чтобы гарантировать, что одно намерение сохраняется на всем протяжении?


person judepereira    schedule 25.04.2013    source источник
comment
Вы следовали руководству здесь: developer.android.com/training/basics/intents /filters.html?   -  person britzl    schedule 25.04.2013
comment
Что заставляет вас думать, что getLaunchIntentForPackage() когда-либо вернет что-то подходящее для использования startActivityForResult()?   -  person CommonsWare    schedule 25.04.2013
comment
Я просто предположил, что так и будет.   -  person judepereira    schedule 25.04.2013
comment
Позвольте мне взглянуть на фильтры намерений.   -  person judepereira    schedule 25.04.2013
comment
Я понял это из stackoverflow.com/questions/15204577/   -  person judepereira    schedule 26.04.2013
comment
Удалось ли решить этот проблемный вопрос? Теперь у меня такая же проблема, как и у вашего вопроса. Если вы решили этот вопрос, пожалуйста, поделитесь своим кодом. Спасибо   -  person ShweLiam    schedule 31.03.2016
comment
@MinTheinWin Я использовал для этого глубокие ссылки. Это похоже на ограничение Android.   -  person judepereira    schedule 31.03.2016
comment
@judepereira Что ты имеешь в виду? Ты не можешь мне помочь?   -  person ShweLiam    schedule 31.03.2016
comment
Нет, не могу. Чтобы решить эту проблему, используйте глубокую ссылку.   -  person judepereira    schedule 31.03.2016


Ответы (2)


Используйте setFlags(0) для очистки всех флагов, которые могут быть созданы getLaunchIntentForPackage:

Intent fmIntent = getPackageManager().getLaunchIntentForPackage("com.example.B");
fmIntent.setFlags(0);
fmIntent.putExtra("hello", "world");
startActivityForResult(fmIntent, REQUEST_TEST);
person Ayaz Alifov    schedule 30.11.2015