2016-06-29 2 views
1

У меня есть 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 !!!

ответ

0

Изменение кода приложения B, как это:

new Handler().postDelayed(new Runnable() 
        { 
         public void run() 
         { 
          Intent i = new Intent(); 
          i.putExtra("ID", "45651232"); 
          //setResult() method should be called after all the putExtra() methods 
          TargetActivity.this.setResult(RESULT_OK, i); 

          finish(); 
         } 
        }, 3000); 

, что ваш исходный код делает то, что вы устанавливаете «ID» дополнительные после установки результата. Вы должны сделать это до метода setResult(). В противном случае изменения в намерении не повлияют на результат. Сначала установите дополнительные значения в Intent, затем используйте метод setResult().

+0

Неы! Не работает. Возвращаемое намерение равно null, а результат - RESULT_CANCELED ... – YUSMLE

+0

Проверьте, не вызван ли этот обработчик ... Проверяйте любые возможности, в которых приложение B может быть закрыто без установки результата –

0

Включите фильтр настроек в файле манифеста для активности, в котором вы используете метод onActivityResult, после чего вы можете получать данные из приложения Othe.

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="text/plain" /> 
</intent-filter> 

Надеется, что это помогает вам

+0

Нет, у меня все еще есть 'data == null 'в моей' onActivityResult() '. – YUSMLE

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