title: How to pass data both ways between different android applications?
body: <p>What's the easiest way to <strong>pass string variables from one application to another and also return values back</strong>? I have access to the source code of both apps, but it has to be two different applications.</p>
  
  <p>I tried with startActivityForResult, but this only seems to work between activies of the same application. When calling an activity from a different package, startActivityForResult returns immediately with RESULT_CANCELED. There seems to be the possibility to solve this with a Service, but isn't that a bit oversized for just some string vars?</p>
  
  <p>Is there an easy and clean way to do this?</p>
  
  <p>Here the code i tried to use for startActivityForResult:</p>
  
  <pre><code>//App A:
              Intent intent = new Intent();
              intent.setAction("com.example.testapp.MESSAGE");
              Bundle b = new Bundle();
              b.putString("loginToken", "263bhqw3jhf6as4yf8j0agtz8h2hj2z9j3hg3g3ggh34uzh2h2ui78h3i9wdnj89x");
              intent.putExtra("MyData", b);
  
              startActivityForResult(intent, TEST_REQUEST);
  
      @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      Log.d("pairing", "onActivityResult called");
      // Check which request we're responding to
      if (requestCode == TEST_REQUEST) {
          // Make sure the request was successful
          Log.d("pairing", "got result, resultCode: " + resultCode);
          if (resultCode == RESULT_OK) {
              // The Intent's data Uri identifies which contact was selected.
              if (data.hasExtra("returnMessage")) {
                  Toast.makeText(this, data.getExtras().getString("returnMessage"), Toast.LENGTH_LONG).show();
              }
  
          }
      }
  }
  
  
              // App B:
          Intent result = new Intent();
          Bundle b = new Bundle();
          b.putString("returnValue", "this is the returned value");
          result.putExtra("MyData", b);
          setResult(Activity.RESULT_OK, result);
          Log.d("pairing", "RESULT_OK set");
          finish();
  
  
  //App B Manifest
          &lt;activity
          android:name="com.example.testapp"
          android:launchMode="singleTop"
          android:screenOrientation="portrait"
          android:windowSoftInputMode="adjustPan" &gt;
          &lt;intent-filter&gt;
              &lt;action android:name="com.example.testapp.MESSAGE" /&gt;
  
              &lt;category android:name="android.intent.category.DEFAULT" /&gt;
  
              &lt;data android:mimeType="text/plain" /&gt;
          &lt;/intent-filter&gt;&lt;/activity&gt;
  </code></pre>
  
  <p>Anybody seeing the mistake? App B always returns immediately with RESULT_CANCELED</p>
  
  <p>EDIT:
  Right now I'm getting a <em>android.content.activitynotfoundexception no activity found to handle intent { act=com.example.testapp.MESSAGE (has extras) }</em> error. What am I doing wrong?</p>