如何使用putExtra打开另一个应用并为其发送一些数据?

时间:2017-08-01 08:48:25

标签: java android android-intent deep-linking

我有两个应用程序(A,B),我想将它们链接在一起。 当用户在应用程序A中时,通过单击按钮我想打开应用程序B并向其发送一些数据。

我在应用A中使用此方法转到应用B并将一些数据发送到应用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;
}

我在app A中这样称呼它:

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

当我调用此方法时,它将打开应用程序B,但我想用putExtra发送的数据将不会发送。

这是我在App B中从代码接收数据的代码:

Bundle bundle = getIntent().getExtras();
if (bundle != null){
    String name = bundle.getString("NAME");
    Log.i("EXTRAS", name);
}

2 个答案:

答案 0 :(得分:3)

在应用 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>

从应用 A 传递数据:

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

从应用 B

中检索数据
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getIntent().getStringExtra("data");
    }

答案 1 :(得分:1)

回答1

在App A中使用Bundle将数据发送到App B

Bundle bundle = new Bundle();
bundle.putString("NAME" , "Ehsan");
goToEncyclopedia.putExtras(bundle);

回答2

删除以下code

goToEncyclopedia.addCategory(Intent.CATEGORY_LAUNCHER);

最终代码将是   App A

Intent sendIntent =   getPackageManager().getLaunchIntentForPackage("com.example.app2");
sendIntent.putExtra("NAME", "Ehsan");
startActivity(sendIntent);

App B

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Intent intent = getIntent();

if (intent.hasExtra("NAME")) {
        String name = intent.getStringExtra("NAME");

}