网页内启动客户端程序——Android
来源:互联网 发布:js拼接字符串的方法 编辑:程序博客网 时间:2024/06/17 01:45
背景:最近做东西看见了一个在移动端网页直接打开客户端程序并跳转自定义界面的例子,就琢磨研究下,发现实际中的用途比自己想的还要多。
用途:
1.通过网页中的内容直接调用客户端的自定义页面。
2.微信、微博等大部分开放的sdk中直接通过分享按钮打开程序。
实现原理:
主要是通过在入口Activity的intent-filter添加过滤的方式来实现调用和传值等操作。
源码:
1.网络端:(发布页面的Express项目,如果需要可以下载)
页面使用了一个新建的NodeJS的Express项目来发布自己的测试Html页面,其中只是添加了一个a标签并使用href的url进行app的调用。
<a href="m://code41.com:9000?action=entryActivity¶ms='String in TextView'">OpenApp</a>
2.Android端:
分为两种情况:一种是浏览器中调用链接打开程序(主要),另外一种是webview中打开链接。
主要说说第一种情况。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.code41.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.code41.demo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <span style="color:#ff0000;"><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:host="code41.com" android:port="9000" android:scheme="m" /> </intent-filter></span> </activity> <activity android:name="com.code41.demo.WebviewActivity" > </activity> </application> <uses-permission android:name="android.permission.INTERNET" /></manifest>PS:此处补充小坑一个,就是标红部分,这是主要主要让功能起作用的代码,但是必须与启动的Main和Launcher的filter分成两个,否则程序无法启动。
此处URI的解释内容如下:
就Android平台而言,URI主要分三个部分:scheme, authority和path。其中authority又分为host和port。格式如下:
scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \---------------------------/ \---/ \--------------------------/
scheme host port path
\--------------------------------/
authority
现在大家应该知道data flag中那些属性的含义了吧,看下data flag
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
除此之外,通过在url后面拼接以下内容来进行参数的传入,同时可以通过getIntent中的方法进行参数的获取
?action=entryActivity¶ms='String in TextView'
MainActivity
<span style="color:#333333;">public class MainActivity extends Activity {private final String tag = MainActivity.class.getName();private Handler mHandler = new Handler();private TextView helloTextView;private Button goButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);helloTextView = (TextView) findViewById(R.id.text_view_hello);goButton = (Button) findViewById(R.id.button_go);</span><span style="color:#ff0000;">Uri uri = getIntent().getData();if (null != uri) {final String action = uri.getQueryParameter("action");final String params = uri.getQueryParameter("params");Log.i(tag, action + "<=>" + params);post(new Runnable() {@Overridepublic void run() {helloTextView.setText(params);}});}</span><span style="color:#333333;">goButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, WebviewActivity.class));}});}private void post(Runnable runnable) {if (isFinishing() || null == mHandler) {return;}mHandler.post(runnable);}}</span>主要的获取参数和启动程序的代码就已经结束了,下面补充自己的webView调用链接的情况。
public class WebviewActivity extends Activity {private final String tag = WebviewActivity.class.getName();private WebView openAppWebview;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webview);openAppWebview = (WebView) findViewById(R.id.webview_load_open_url);openAppWebview.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {<span style="color:#ff0000;">Uri uri = Uri.parse(url);if ("m".equals(uri.getScheme()) && "code41.com".equals(uri.getHost())) {String action = uri.getQueryParameter("action");String params = uri.getQueryParameter("params");Log.i(tag, action+"<=>"+params);} else {openAppWebview.loadUrl(url);}</span>return true;}});openAppWebview.loadUrl("http://192.168.1.112:3000");}}
效果截图:
- 网页内启动客户端程序——Android
- 在网页中启动调用客户端桌面程序
- 网页启动客户端程序代码
- android客户端程序和网页浏览的程序的区别
- 浏览器网页判断手机是否安装IOS/Android客户端程序
- 客户端启动JAVA程序
- Android客户端写Cookie和内嵌的网页实现登录状态的同步
- Android客户端性能测试—CPU、启动时间(二)
- 从浏览器启动客户端程序
- loadrunner启动java客户端程序
- loadrunner启动java客户端程序
- 网页中启动客户端winForm应用程序
- 网页调用 iOS/Android 客户端
- 网页调用 iOS/Android 客户端
- 网页调用 iOS/Android 客户端
- 网页调用 iOS/Android 客户端
- Android Jsoup网页爬虫—>程序猿面试指南App
- WP8--程序内启动其他程序
- 二路归并排序实现
- 素 数
- quick-cocos2d-x3.3中class函数的分析
- 《将博客搬至51CTO》
- js练习
- 网页内启动客户端程序——Android
- openGL学习笔记二:看看上一篇我们写的代码
- 北京大学公开课-影片赏析
- leetcode -- 3Sum
- c语言重载不同类型数组的print(c99标准)
- HDU 1205 Specialized Four-Digit Numbers
- dubbo是如何“插入”到spring框架中的
- android tabhost底部菜单栏实现原理与代码
- 谁是赌神