appA 应用
/**
* 通过包名拉起app
* @param packagename 要拉起app的包名
*/
public static void doStartApplicationWithPackageName(String packagename) {
// 通过包名获取要跳转的app,创建intent对象
Intent intent = PageManager.getCurrentActivity().getPackageManager().getLaunchIntentForPackage(packagename);
//测试参数随机数
Random rd = new Random();
// 这里如果intent为空,就说名没有安装要跳转的应用嘛
if (intent != null) {
// 这里跟Activity传递参数一样的嘛,不要担心怎么传递参数,还有接收参数也是跟Activity和Activity传参数一样
intent.putExtra("name", "name"+":"+rd.nextInt(100));
intent.putExtra("birthday", "birthday"+":"+rd.nextInt(100));
PageManager.getCurrentActivity().startActivity(intent);
} else {
// 没有安装要跳转的app应用,提醒一下
Toast.makeText(PageManager.getCurrentActivity().getApplicationContext(), "哟,赶紧下载安装这个APP吧", Toast.LENGTH_LONG).show();
}
}
appB应用
AndroidManifest.xml
<activity android:name=".WellcomeActivity"
android:launchMode="singleInstance"><!--必须设置成这个模式-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
启动页面可以获取到参数 根据参数跳转不同页面 有可能singleInstance加载动画和我们应用内部加载动画不一致 我们也可以自定activity启动关闭动画
public class WellcomeActivity extends AppCompatActivity {
private final static int MSG_200 = 200;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_200:
Intent intent = new Intent(WellcomeActivity.this, MainActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.right_in,R.anim.right_out);//为了使动画统一
finish();
break;
default:
break;
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wellcome);
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle != null) {
String name = bundle.getString("name");
String birthday = bundle.getString("birthday");
if (name != null && birthday != null) {
Toast.makeText(getApplicationContext(), "name:" + name + " birthday:" + birthday, Toast.LENGTH_SHORT).show();
}
}
mHandler.sendEmptyMessageDelayed(MSG_200, 3000);
}
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.right_in,R.anim.right_out);//为了使动画统一
}
}
right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="300"/>
</set>
right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="-100%p"
android:duration="300"/>
</set>
注意:设置singleInstance 打开另一个界面黑屏解决
另一个界面的主题样式需要加上
<item name="android:windowIsTranslucent">true</item>
效果图

本文主要探讨了在Android中,当appA尝试拉起已经处于后台运行状态的appB时,如何解决获取不到参数的问题。通过调整AndroidManifest.xml配置,特别是考虑singleInstance模式下可能出现的动画不一致和黑屏现象,提供了相应的解决方案,包括自定义启动和关闭动画以及设置界面主题样式。
163

被折叠的 条评论
为什么被折叠?



