伪协议在Android开发中的应用

118 阅读3分钟

需要注意的是:scheme、hostname是必须的。其它部分可以选择要或不要,但是顺序不能变动。

URL Scheme解析

======================================================================

android提供了一种处理Scheme的类:Uri,位置在android.net.Uri。

通过Uri可以操作伪协议,以androidwind.com:8080/test/add?ui…

getScheme()获取scheme:https;

getHost()获取hostname:androidwind.com;

getPort()获取hostname:8080;

getPath()获取path:/test/add;

getQuery()获取query:uid=100&uid=200;

也可以通过getQueryParameter(key)获取指定的值,比如getQueryParameter(uid),值为100;

getFragment()获取fragment:myfrag

URL Scheme应用

======================================================================

配置


URL Scheme的配置有两种方式,一种是直接在AndroidMainfest.xml中配置好,通过Intent跳转;

还有一种是在代码中直接解析URL Scheme,通过获取到的字段,通过代码进行跳转。

我们定义一个伪协议:tiny://androidwind:8080/add

1. AndroidMainfest.xml配置

<data

android:host="androidwind"

android:path="/add"

android:port="8080"

android:scheme="tiny"

/>

2. 代码解析

String url = "tiny://androidwind:8080/add";

Uri uri = Uri.parse(url);

String scheme = uri.getScheme();

String host = uri.getHost();

String path = uri.getPath();

//判断path是不是某个业务

if("add".equals(path)) {

// 跳转到对应的业务页面;

}

URL Scheme应用场景


1. app应用内页面跳转

String url = "tiny://androidwind:8080/add";

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

startActivity(intent);

这样就可以打开SchemeActivity这个页面;

2. app应用内页面跳转(通过代码解析)

String url = "tiny://androidwind:8080/add";

Uri uri = Uri.parse(url);

String scheme = uri.getScheme();

String host = uri.getHost();

String path = uri.getPath();

//判断path是不是某个业务

if ("/add".equals(path)) {

// 跳转到对应的业务页面;

Toast.makeText(this, "伪协议解析完成", Toast.LENGTH_SHORT).show();

startActivity(new Intent(this, TestActivity.class));

}

3. 通过app应用内的H5页面跳转到app指定页面

StringBuilder sb = new StringBuilder();

sb.append("");

sb.append("");

sb.append("

<a href="" + url + "">"

  • "通过app应用内的H5页面跳转到app指定页面

");

sb.append("");

sb.append("");

wv.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null);

4. 外部app启动本app,并跳转到指定页面

外部app可以通过下面的代码打开另外一个app:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("tiny://androidwind:8080/add"));

startActivity(intent);

如果出现闪退则说明手机里面没有目标app,应该增加try catch处理。

5. 通过浏览器启动本app。并跳转到指定页面

通过手机浏览器,打开一个网页,然后点击网页上的超链接,打开手机内的app。

比如通过手机访问:

htmlpreview.github.io/?https://gi…

点击"打开app",就可以打开手机内安装的指定应用。

另外说明下,github上传的html文件,如果需要预览效果,可以在htmlpreview.github.io/网站做一个转换即可。

6. 通过push消息跳转到指定页面

NotificationManager notifyManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

NotificationCompat.Builder builder;

builder = new NotificationCompat.Builder(MainActivity.this, "default");

builder.setSmallIcon(R.mipmap.ic_launcher)

.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))

.setContentTitle("tiny")

.setContentText("click to test scheme")

.setTicker("您有新的消息,请注意查收!")

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件,需要的小伙伴可以私信我【面试】免费领取或者点击GitHub免费获取!