Android进阶之使用Scheme实现从网页启动APP
来源:互联网 发布:软件架构师书籍 编辑:程序博客网 时间:2024/06/05 14:12
0 转载地址
Android 使用Scheme实现从网页启动APP
1 导言
通过使用Scheme,可以实现用手机的浏览器(内置或第三方)访问一个网页,启动自己的应用,或者在一个应用使用WebView.loadUrl()方法启动另外一个应用。
2 实现原理
在Android平台而言,URI主要分三个部分:scheme, authority,path, queryString。其中authority又分为host和port。
// 格式如下scheme://host:port/path?qureyParameter=queryString
// 举个例子http://www.orangecpp.com:80/tucao?id=hello
在Android的Manifest配置文件中,intent-filter配置项中有data配置,其中data包含内容有如下。通过配置data可以对网页进行过滤,符合匹配条件的网页才跳转到应用。一般只需要设置host和scheme即可。
<data android:host="" // 指定数据的主机名,如www.baidu.com android:mimeType="" // 指定可以处理的数据类型,允许使用通配符的方式进行指定 android:path="" // 主机名和端口之后的部分 android:pathPattern="" android:pathPrefix="" android:port="" // 指定数据端口部分 android:scheme="" // 指定数据的协议部分,如http android:ssp="" android:sspPattern="" android:sspPrefix=""/>
3 实现步骤
(1)首先我们写一个测试网页test.html
<!DOCTYPE html> <html> <body><h1>Test Scheme</h1> <!--自动加载隐藏页面跳转--><iframe src="myscheme://www.orangecpp.com:80/mypath?key=mykey" style="display:none"></iframe><!--手动点击跳转--><a href="myscheme://www.orangecpp.com:80/mypath?key=mykey">Click</a></body> </html>
(2)创建一个Android测试工程,修改Manifest文件,给想要接收跳转的Activity添加intent-filter配置
<activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <!--需要添加下面的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="myscheme"/> // 重点myscheme </intent-filter> </activity>
(3)在配置好intent-filter的Activity里即可获取外部跳转的参数信息
public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent =getIntent(); Uri uri = intent.getData(); Log.e(TAG, "scheme: "+uri.getScheme()); Log.e(TAG, "host: "+uri.getHost()); Log.e(TAG, "port: "+uri.getPort()); Log.e(TAG, "path: "+uri.getPath()); Log.e(TAG, "queryString: "+uri.getQuery()); Log.e(TAG, "queryParameter: "+uri.getQueryParameter("key")); }}
// 结果打印E/MainActivity: scheme:myschemeE/MainActivity: scheme: myschemeE/MainActivity: host: www.orangecpp.comE/MainActivity: port: 80E/MainActivity: path: /mypathE/MainActivity: queryString: key=mykeyE/MainActivity: queryParameter: mykey
阅读全文
0 0
- Android进阶之使用Scheme实现从网页启动APP
- Android 使用Scheme实现从网页启动APP
- Android 使用Scheme实现从网页启动APP
- Android 使用Scheme实现从网页启动APP
- Android Feature(scheme实现网页打开App)小知识点等
- 使用URL Scheme启动app
- Android 使用 Scheme 启动淘宝,天猫等其他APP
- android 通过Scheme链接启动app
- Android 通过URL scheme 启动App
- 通过scheme拦截网页链接,实现网页跳转APP
- Android中通过scheme实现网页打开App(deep-link)
- android 从微信分享的网页中启动APP
- 通过一个打开APP之 Android scheme
- Android之URL Scheme使用
- Android 通过网页打开自己的APP(scheme)
- Android 通过网页打开自己的APP(scheme)
- Android 通过网页打开自己的APP(scheme)
- Android 通过网页打开自己的APP(scheme)
- MySQL横表和纵表的相互转换
- 98道常见Hadoop面试题及答案解析
- GPIO介绍
- [机器学习实战] k-近邻算法
- 自己的maven jar 包发布到私服服务器不成功,问题解决方案
- Android进阶之使用Scheme实现从网页启动APP
- Redis系列-4.哈希(Hash)结构
- B树与B+树简明扼要的区别
- Java中接口及抽象类的实例化问题
- phpcms后台本地运行速度慢
- WHCTF 2017 逆向题 CRACKME、BABYRE、EASYHOOK 的解题思路
- 我从Angular 2转向Vue.js, 也没有选择React
- Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs
- MyEclipsse的字符问题