У меня есть 2 приложения, A & B. В приложении A я открываю активность приложения B с помощью Deep Link и через startActivityForResult()
, но когда в наборе кода результата в приложении B и return, App A только что получил RESULT_CANCELED
! Мой первый вопрос: «Можно ли вернуть результат при использовании Deep Link для открытия другого приложения?», И если да, то где моя ошибка ?!Возвратите результат при использовании Deep Link, чтобы открыть другое приложение
Мой манифест, в App B:
<activity android:name=".activity.TargetActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<!-- note that the leading "/" is required for pathPrefix-->
<data
android:host="www.example.com"
android:pathPrefix="/gizmos"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/gizmos"
android:scheme="https" />
<data
android:host="example.com"
android:pathPrefix="/gizmos"
android:scheme="http" />
<data
android:host="example.com"
android:pathPrefix="/gizmos"
android:scheme="https" />
</intent-filter>
</activity>
В App A:
Uri webpage = Uri.parse("android-app://com.vancosys.payment/http/www.example.com/gizmos?name=FMarket&id=4231");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(webIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe)
{
// '4231' is my request code
startActivityForResult(webIntent, 4231);
}
также:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == 4231)
{
if (resultCode == RESULT_OK)
{
String id = data.getStringExtra("ID");
Intent i = new Intent(this, ResultActivity.class);
i.putExtra("RESULT", true);
i.putExtra("ID", id);
startActivity(i);
}
else
{
// It JUST equals to RESULT_CANCELED!!!
Intent i = new Intent(this, ResultActivity.class);
i.putExtra("result", false);
startActivity(i);
}
}
}
И, наконец, в App B:
new Handler().postDelayed(new Runnable()
{
public void run()
{
Intent i = new Intent();
TargetActivity.this.setResult(RESULT_OK, i);
i.putExtra("ID", "45651232");
finish();
}
}, 3000);
ОБНОВЛЕНИЕ: Intent data
в onActivityResult()
является null
!!!
Неы! Не работает. Возвращаемое намерение равно null, а результат - RESULT_CANCELED ... – YUSMLE
Проверьте, не вызван ли этот обработчик ... Проверяйте любые возможности, в которых приложение B может быть закрыто без установки результата –