appA拉起appB 如果appB已经在后台运行 获取不到参数的解决

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

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>

效果图

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值