Android 通过scheme跳转界面

需求

通过后台返回链接地址

eg: app://com.bobo.package/path?param1=abc&param2=cde

跳转到指定的Activity 并带入参数

实现

1.在manifest中配置Activity

<activity android:name=".ActivityName">
     <intent-filter>
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="app"
                  android:host="com.bobo.package"
                  android:path="/path"/>
      </intent-filter>
</activity>

2.实现跳转

private void startActivity(Context context) {
        try {
            Uri uri = Uri.parse("app://com.bobo.package/path?param1=abc&param2=cde");
            Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(uri);
            PackageManager packageManager=getPackageManager();
            ComponentName componentName=intent.resolveActivity(packageManager);
            if (componentName!=null){
                context.startActivity(intent);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3.Activity中处理数据获取参数

private void dealScheme() {
        Intent intent = getIntent();
        String action = intent.getAction();
        Uri uri=null;
        if (Intent.ACTION_VIEW.equals(action)) {
           Uri uri= intent.getData();
        }
        if(uri==null)
           return;
        String param1=url.getQueryParameter("param1");
        String param2=url.getQueryParameter("param2");
       // doSomething(param1,param2);
}

填坑

1.如下两个Activity 当通过scheme 跳转界面时 ,系统会提示选择打开方式 因为没有精确匹配要跳哪个界面

<activity android:name=".ActivityAAAAAA">
     <intent-filter>
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="app"/*没有配置hostpath*/
                />
      </intent-filter>
</activity>

<activity android:name=".ActivityBBBBBB">
     <intent-filter>
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="app"
                  android:host="com.bobo.package"
                />
      </intent-filter>
</activity>

2.如果不同的链接都要跳到一个Activity

eg: app://com.bobo.package/path?param1=abc&param2=cde
application://host/route?param1=abc&param2=cde

Activity配置

<activity android:name=".ActivityName">
     <intent-filter>
         <action android:name="android.intent.action.VIEW"/>
         <category android:name="android.intent.category.DEFAULT"/>
         <category android:name="android.intent.category.BROWSABLE"/>
         <data android:scheme="app"
               android:host="com.bobo.package"
               android:path="/path"/>
         <data android:scheme="application"
              android:host="host"
              android:path="/route"/>
      </intent-filter>
</activity>

猜你喜欢

转载自blog.csdn.net/huagbo/article/details/76073481