重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
提了一个需求叫我调研一下,他已经测试了IOS平台上是可以的,需求很简单就是在系统浏览器中通过输入一个uri就可以打开相应的app。
在阳东等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、网站设计 网站设计制作定制开发,公司网站建设,企业网站建设,品牌网站制作,成都全网营销,外贸营销网站建设,阳东网站建设费用合理。
比如你在IOS中的系统浏览器中输入:tel://123,就会跳到拨打电话页面而且拨打号码是123,像这样的命令,老大他用了小米手机测试了一下,发现可以的,所以他就以为Android的也是可以的,但是当我用三星和htc手机测试发现不行,这时候老大就纠结了,但是我个人认为,我们都知道小米手机是模仿IOS的,没想到模仿的这么想。所以老大就叫我去调研,我查阅了资料之后,找到了解决办法如下
先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。)
点击浏览器中的URL链接,启动特定的App。
首先做成HTML的页面,页面内容格式如下:
a href="[scheme]://[host]/[path]?[query]"启动应用程序/a
这一句就可以了。
各个项目含义如下所示:
scheme:判别启动的App。 ※详细后述
host:适当记述
path:传值时必须的key ※没有也可以
query:获取值的Key和Value ※没有也可以
作为测试好好写了一下,如下:
a href="myapp://jp.app/openwith?name=zhangsanage=26"启动应用程序/a
接下来是Android端。
首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予)
※必须添加项
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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/
/intent-filter
HTML记述的内容加入data …/。
其中必须的内容仅scheme,没有其他内容app也能启动。
※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。
所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。
intent-filter
action android:name="android.intent.action.MAIN"/
category android:name="android.intent.category.LAUNCHER" /
/intent-filter
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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/
/intent-filter
这样的话,没有问题。
接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:
Intent i_getvalue = getIntent();
String action = i_getvalue.getAction();
if(Intent.ACTION_VIEW.equals(action)){
Uri uri = i_getvalue.getData();
if(uri != null){
String name = uri.getQueryParameter("name");
String age= uri.getQueryParameter("age");
}
}
这样就能获取到URL传递过来的值了。
——————————————————————————————————我是分割线————————————————————————————————————
代码copy完了,是不是很惊奇的发现用浏览器输入
myapp://jp.app/openwith?name=zhangsanage=26
是不是404,打不开?
楼主你这不是骗人么!楼主你个混蛋啊。
客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。
——————————————————————————————————我是分割线————————————————————————————————————
突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。
接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。
最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。
在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的
所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。对了,百度这个是有集成他们inapp这个sdk的。
再附上stackoverflow两个相关链接:
张小喜告别996 实现高效编程 减少开发压力 开启Java高效编程之门(完整版高清视频)百度网盘
链接:
提取码: aizj 复制这段内容后打开百度网盘手机App,操作更方便哦
若资源有问题欢迎追问~
基于java EE的网络云盘系统
云盘:
主要是对注册客户进行资料存储、管理
(上传、下载、查询、分类、删除、移动等)
最终用户
1)注册用户
注册、登录、上传文档、系统对资料进行分类(视频、音频(在线播放)、图片浏览)
目录操作、文件管理(删除、改名)、查询文件、分享
2)管理员
注册用户管理:启用、禁用账户
文件管理:删除、
3)未登录账号
搜索云盘所有共享文件,并可以下载
3.创新点:
1)网页版、客户端、手机APP
完成网页版功能
2)大文件处理
4.基本数据库(初步)
文件保存在服务器端某个设定目录中,设定目录与用户关联,文件的基本信息保存数据库(文件名、路径、大小、上次日期、Hashcode、文件类型......)
实体:
用户表(类型分为管理员、用户):用户名、密码、用户类型
文件表:编号、文件名、保存路径、大小、上传日期、Hashcode、文件类型、【用户ID】、文件状态
用户文件表:
编号、文件ID、用户ID
共享信息表:
编号、文件ID、URL
如何完成?
1. 使用UML(用例图)描述系统功能,每个用例图详细描述。(15-20页)
2.详细设计
数据库设计
实体、实体关联、E-R图
数据库物理设计
数据库架构设计
MVC框架
Model(BLL、DAL):实体类、DB工具类、Service层(功能:使用接口)
视图原型:
HTML模板
3.代码编程
很简单。在左边一栏,用鼠标点击你要上传的文件夹,按住鼠标左键不放,拖动文件夹到右边一栏,也就是网盘一栏指定位置,电脑就自动就开始上传了。我就是用这种方法上传文件的。
明白网盘存储原理。并不是给你开辟你的私有盘,所有人的数据都存在一个盘里。大家都对这个盘可以读写。为了区分东西都是谁的。在表结构中有文件(id)和所属人+(共享人)这三个字段。当我把文件共享给你的时候。就是把文件(id)+所属人+(共享人,你)这个条数据修改一下。你可以选择保存到你本地,那就是文件复制,新的文件id+所属人(你)。
这个肯定的,你想通过代码访问百度网盘上的数据就必须调用百度提供的接口,百度的接口是要有授权才能访问的,也就是你需要注册了开发者账号并且创建了一个应用后,百度才会分配给你调用接口所必须的token,拿着这个token才有权访问百度的云盘接口