如何使用 putExtra 打开另一个应用程序并为其发送一些数据?
How to use putExtra to open another app and send some data for it?
我有两个应用程序(A、B),我想 link 将它们放在一起。
当用户在应用程序 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;
}
我在应用程序 A 中这样称呼它:
openApp(mContext, "encyclopedia.rasad.app.codenevisha.com.encyclopedia");
当我调用此方法时,它会打开应用程序 B,但我想用 putExtra 发送的数据不会发送。
这是我在 App B 中用于接收来自 intent 的数据的代码:
Bundle bundle = getIntent().getExtras();
if (bundle != null){
String name = bundle.getString("NAME");
Log.i("EXTRAS", name);
}
回答 1
在App A中使用Bundle
向App B发送数据
Bundle bundle = new Bundle();
bundle.putString("NAME" , "Ehsan");
goToEncyclopedia.putExtras(bundle);
回答2
删除 code
下一行
goToEncyclopedia.addCategory(Intent.CATEGORY_LAUNCHER);
最终代码将是
应用程序 A
Intent sendIntent = getPackageManager().getLaunchIntentForPackage("com.example.app2");
sendIntent.putExtra("NAME", "Ehsan");
startActivity(sendIntent);
应用程序 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");
}
在应用中添加 Intent 过滤器 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");
}
我有两个应用程序(A、B),我想 link 将它们放在一起。 当用户在应用程序 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;
}
我在应用程序 A 中这样称呼它:
openApp(mContext, "encyclopedia.rasad.app.codenevisha.com.encyclopedia");
当我调用此方法时,它会打开应用程序 B,但我想用 putExtra 发送的数据不会发送。
这是我在 App B 中用于接收来自 intent 的数据的代码:
Bundle bundle = getIntent().getExtras();
if (bundle != null){
String name = bundle.getString("NAME");
Log.i("EXTRAS", name);
}
回答 1
在App A中使用Bundle
向App B发送数据
Bundle bundle = new Bundle();
bundle.putString("NAME" , "Ehsan");
goToEncyclopedia.putExtras(bundle);
回答2
删除 code
goToEncyclopedia.addCategory(Intent.CATEGORY_LAUNCHER);
最终代码将是 应用程序 A
Intent sendIntent = getPackageManager().getLaunchIntentForPackage("com.example.app2");
sendIntent.putExtra("NAME", "Ehsan");
startActivity(sendIntent);
应用程序 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");
}
在应用中添加 Intent 过滤器 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");
}