Android - scheme 一个app跳转另一个app、模块开发

说明:

scheme 两个主要功能

1、一个app跳转另一个app,并且传递参数,用到scheme跳转。

2、一个app体量太大,想把一部分功能单独作为模块开发,可以在主app里面使用scheme跳转到模块app里面(模块app里面不设置启动页,则不会显示)。

 

简单实现:

1、App1 使用scheme调用App2

点击按钮调用这个函数即可

Uri uri = Uri.parse("bocmcht://payresult/mobile?jsonData=123");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

2、App2接收App1的参数

1)现在AndroidManifest.xml中配置类的接收参数


        

            
                
                
                
            
        

2)类里面获取值 

public class BOCPayResultHandler extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //bocmcht://payresult/mobile?jsonData=123

        Uri uri = getIntent().getData();
        String scheme = uri.getScheme();// 打印:bocmcht
        String host = uri.getHost();//打印:payresult
        String path = uri.getPath();//打印:/mobile
        String queryString = uri.getQuery();//打印:jsonData=123
        Log.e("中国银行", scheme + "..." + host + "..." + "..." +path + "..." + queryString);
    }
}

3、判断scheme是否有效

    /**
     * 判断中国银行是否安装 - 2
     *
     * @return
     */
    public static boolean checkUrlScheme(Activity activity) {
        Uri uri = Uri.parse("bocpay://www.boc.cn/mobile?param=**");//scheme
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);

        PackageManager packageManager = activity.getPackageManager();
        List activities = packageManager.queryIntentActivities(intent, 0);
        return !activities.isEmpty();
    }   

详细介绍:

1、参数:调用时候的url

"bocmcht://payresult/mobile?jsonData=123"

 对应:

://:/?query

解释:scheme是bocmcht,host是payresult,path是mobile,query是:jsonData=123"

下面是一个完整的demo(多了一个port)

content://com.example.project:200/folder?jsonData=123

解释:scheme是content,host是com.example.project,port是200,path是folder,query是:jsonData=123

2、接收:AndroidManifest.xml中配置

配置中只需要配置:scheme、host、port、path 即可,可单个配置,也可多个配置

  • 如果intent-filter中只指定了scheme,那么所有带有该sheme的URI都能匹配到该intent-filter。
  • 如果intent-filter中只指定了scheme和authority(authority包括host和port两部分)而没有指定path,那么所有具有相同scheme和authority的URI都能匹配到该intent-filter,而不用考虑path为何值。
  • 如果intent-filter中同时指定了scheme、authority和path,那么只有具有相同scheme、authority和path的URI才能匹配到该intent-filter。

需要注意的是,intent-filter的标签在指定path的值时,可以在里面使用通配符*,起到部分匹配的效果。

3、h5网页中通过scheme打开app

移动浏览器H5页面通过scheme打开本地应用:https://blog.csdn.net/u012246458/article/details/83787854

 

 

参考文章:

  • https://blog.csdn.net/iispring/article/details/48481793
  • https://blog.csdn.net/chaoyue0071/article/details/48326303?locationNum=10&fps=1
  • https://www.jianshu.com/p/7b09cbac1df4

你可能感兴趣的:(【,Android,基础开发,】)