Android 跳转到另一个应用

最近遇到了这样一个需求,就是为了用户的方便,要实现几个app之间的切换,说白了也就是从一个app跳转到另一个app。问题其实很简单,但是为了使用起来方便,弄成一个工具类分享出来

1.工具类代码

/**
 * app跳转工具类
 */
public class AppJumpUtil {
    //想要跳转到的包名
    public static final String PACKAGE_NAME = "com.xxx.xxx";
    //这里可以根据自己的需要选择跳转到的Activity的路径
    public static final String CLASS_NAME = "com.xxx.xxx.LoginActivity";

    /**
     * 判断apk是否安装
     *
     * @param context
     * @return
     */
    public static boolean isAppInstalled(Context context, String packageName) {
        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }

    public static void JumpToActivity(Context context, String packageName, String className) {
        Intent intent = new Intent();
        intent.setClassName(packageName, className);
        //可以根据自己的需要增加参数
        intent.putExtra("flag", "Jump");
        context.startActivity(intent);
    }

}

2.如何使用(例如从app1中的MainActivity,跳转到app2的LoginActivity)

app1-MainActivity

binding.tvJump.setOnClickListener(v -> {
            if(!isAppInstalled(this,PACKAGE_NAME)){
                ToastUtil.showShortToast(this,"应用不存在,请确认已安装该应用");
                return;
            }
            AppJumpUtil.JumpToActivity(MainActivity.this, PACKAGE_NAME, CLASS_NAME);
        });

app2-LoginActivity

Intent intent=getIntent();
        String flag = intent.getStringExtra("flag");
        if("Jump".equals(flag)){
            //调起来登录页之后的处理,比如这里我想给自动登录的标志位赋值
            isAutoLogin = true;
        }

那么这样的话,就实现了想要的Android 跳转到另一个App的功能。

写在后面:

其实在AppJumpUtil中的Jump方法中就完全可以做isAppinstalled的判断,如下:

public static void JumpToActivity(Context context, String packageName, String className) {
        if(!isAppInstalled(context,packageName)){
            Toast.makeText(context, "应用不存在,请确认已安装该应用",Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent();
        intent.setClassName(packageName, className);
        intent.putExtra("flag", "Jump");
        context.startActivity(intent);
    }

然后外面调用的时候直接调AppJumpUtil.JumpToActivity()方法,更简单

但是这样检查app是否存在就与跳转另一个app的操作连在了一起,那么有一个坏处就是,比如说,有些操作必须得放在跳转之前处理,但是如果应用不存在的话还不能执行。那这种时候,显然这样写就有点问题

那么就只能像上面给的工具类里面的那样,给分开来,让在业务中分别调用检查app存在,以及执行跳转动作

想表达什么意思呢,就是说,工具类在保证不零碎的前提之下,尽可能的对外暴露更多的“可能性”,要不然,确实是做到了高内聚,里面写的方法都是与我们想要实现的“跳转到另一个app”的功能高度相关的,但是对于业务来说,检查存在和执行跳转耦合在一块了

确实我们可以在修改业务代码中,再调用一次检查app是否存在的方法不就行了么,确实可以,但是那样的写法,总觉得有点冗余了。当然如果你没有我上面说的那种场景,这种方法更优,还是那句话,一切都从实际出发

好了,也没啥意思,就啰嗦这么几句

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RPG旅人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值