Android开发之Browser.EXTRA_APPLICATION_ID

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。在某些情况下,了解和使用这一参数有助于提高应用程序与系统浏览器的交互效果。

EXTRA_APPLICATION_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);

代码解释

  1. 创建Intent: 使用Intent.ACTION_VIEW和目标URL创建一个Intent。
  2. 附加参数: 使用putExtra方法将应用程序的包名作为EXTRA_APPLICATION_ID附加到Intent中。
  3. 启动Activity: 使用context.startActivity(intent)启动浏览器应用。

为什么使用EXTRA_APPLICATION_ID

  • 标识来源: 通过传递EXTRA_APPLICATION_ID,浏览器能够知道哪个应用发起了请求。这在调试和分析用户行为时尤为重要。
  • 安全性和权限管理: 某些浏览器可能会基于来源应用的ID进行权限管理或者行为限制。

注意事项

  1. 兼容性: 并非所有浏览器都支持Browser.EXTRA_APPLICATION_ID。在实际开发中,应当进行相应的兼容性测试。
  2. 隐私问题: 传递应用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"));

代码解释

  1. 创建CustomTabsIntent: 使用CustomTabsIntent.Builder创建Custom Tabs的Intent。
  2. 设置数据和参数: 将目标URL和EXTRA_APPLICATION_ID附加到Intent。
  3. 启动Custom Tabs: 使用launchUrl方法启动Custom Tabs。

结论

有时候解决问题的技术并不难,难的是调查的过程,和解题的思路。

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值