Android开发
第一章 Android开发之Browser.EXTRA_APPLICATION_ID
文章目录
前言
最近有一个特别有意思的需求,大体需求是浏览器(现代浏览器)打开业务网站,调用自定义APP进行传值,进行一些数据处理,之后把处理的数据传回浏览器所对应的业务网站
实现原理很简单,就是使用 Android(java)中的Intent 对象的Intent.ACTION_VIEW就可以实现这个功能,但是在使用时发生了一个很有意思的情况
在我满心欢喜的测试的时候,发现Firefox浏览器竟然在接收传回的URl时,打开了一个新的tab页,导致之前在业务页面做的一些操作无法迁移到新的tab页,但是我已经设置了Browser.EXTRA_APPLICATION_ID 参数,正常现象应该直接在原tab页上进行重定向刷新页面。
随着深入的调查,发生Firefox压根就不支持Browser.EXTRA_APPLICATION_ID属性 。。。
我也进行了多方位的验证,包括在Firefox Element|Fenix进行咨询,得到的答案就是 It is not supported
而且几年间,有很多人去咨询这个问题
在2023年,Firefox官方把这个需求的更改加入到Bugzilla中,但是一年过去了,也没有人去做修复
bugzilla
不知道什么原因导致一个现代浏览器功能一直被搁置。
言归正传,说一下Browser.EXTRA_APPLICATION_ID具体使用方法(目前测试Google系内核的都支持此功能)
一、EXTRA_APPLICATION_ID是什么?
在Android开发中,Browser.EXTRA_APPLICATION_ID是一个用于启动浏览器应用的额外参数。这一常量用于向浏览器应用传递启动请求的应用程序的ID。在某些情况下,了解和使用这一参数有助于提高应用程序与系统浏览器的交互效果。
1.基本用法
Browser.EXTRA_APPLICATION_ID
是定义在android.provider.Browser
类中的一个常量,其值为"com.android.browser.application_id"
。这个参数常用于通过Intent启动浏览器时,标识发出Intent的应用程序。
2.定义
代码如下(示例):
public static final String EXTRA_APPLICATION_ID = "com.android.browser.application_id";
3.使用场景
启动浏览器并打开特定URL
当你的应用需要启动系统浏览器并打开一个特定URL时,可以使用Intent进行操作,并附加Browser.EXTRA_APPLICATION_ID参数。以下是一个简单的示例代码:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
context.startActivity(intent);
代码解释
- 创建Intent: 使用Intent.ACTION_VIEW和目标URL创建一个Intent。
- 附加参数: 使用putExtra方法将应用程序的包名作为EXTRA_APPLICATION_ID附加到Intent中。
- 启动Activity: 使用context.startActivity(intent)启动浏览器应用。
为什么使用EXTRA_APPLICATION_ID
- 标识来源: 通过传递EXTRA_APPLICATION_ID,浏览器能够知道哪个应用发起了请求。这在调试和分析用户行为时尤为重要。
- 安全性和权限管理: 某些浏览器可能会基于来源应用的ID进行权限管理或者行为限制。
注意事项
- 兼容性: 并非所有浏览器都支持Browser.EXTRA_APPLICATION_ID。在实际开发中,应当进行相应的兼容性测试。
- 隐私问题: 传递应用ID可能涉及用户隐私问题,需要确保在合规和隐私保护的前提下使用。
二、进阶应用
1.与自定义Tabs的结合
在现代Android应用开发中,更多的开发者选择使用Chrome Custom Tabs来替代传统的浏览器Intent,因为它能够提供更好的用户体验。以下是一个结合Custom Tabs使用EXTRA_APPLICATION_ID的示例:
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();
Intent intent = customTabsIntent.intent;
intent.setData(Uri.parse("http://www.baidu.com"));
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName());
customTabsIntent.launchUrl(context, Uri.parse("http://www.baidu.com"));
代码解释
- 创建CustomTabsIntent: 使用CustomTabsIntent.Builder创建Custom Tabs的Intent。
- 设置数据和参数: 将目标URL和EXTRA_APPLICATION_ID附加到Intent。
- 启动Custom Tabs: 使用launchUrl方法启动Custom Tabs。
结论
有时候解决问题的技术并不难,难的是调查的过程,和解题的思路。