Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use putExtra to open another app and send some data for it?

I have two apps (A, B) that I want to link them together. When the user is in app A, by clicking on a button I want to open app B and send some data to it.

I used this method in app A to go app B and send some data to app B:

public static boolean openApp(Context mContext, String packageName) {
    PackageManager manager = context.getPackageManager();
    Intent goToEncyclopedia = manager.getLaunchIntentForPackage(packageName);
    if (goToEncyclopedia == null) {
        return false;
    }
    goToEncyclopedia.addCategory(Intent.CATEGORY_LAUNCHER);
    goToEncyclopedia.putExtra("NAME" , "Ehsan");
    context.startActivity(goToEncyclopedia);

    return true;
}

and I Call it like this in app A:

openApp(mContext, "encyclopedia.rasad.app.codenevisha.com.encyclopedia");

When I call this method it will open app B but data that I want to send with putExtra will not send.

And this is my code in App B to receive data from intent:

Bundle bundle = getIntent().getExtras();
if (bundle != null){
    String name = bundle.getString("NAME");
    Log.i("EXTRAS", name);
}
like image 818
Ehsan Avatar asked Aug 01 '17 08:08

Ehsan


People also ask

How do you pass data from one activity to another activity using intent?

The easiest way to do this would be to pass the session id to the signout activity in the Intent you're using to start the activity: Intent intent = new Intent(getBaseContext(), SignoutActivity. class); intent. putExtra("EXTRA_SESSION_ID", sessionId); startActivity(intent);


1 Answers

Add intent filter in app B:

<activity android:name=".MainActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <intent-filter>
                <action android:name="com.yourpackage.action" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

Pass data from app A:

        Intent intent = new Intent("com.yourpackage.action");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("data","data string");
        startActivity(intent);

Retrieve data from app B:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getIntent().getStringExtra("data");
    }
like image 97
Pratik Popat Avatar answered Nov 15 '22 21:11

Pratik Popat