- 浏览: 237642 次
- 性别:
- 来自: 广州
最新评论
-
Janne:
你好 有源代码?可以发到我的邮箱里学学吗?2731049993 ...
achartengine画出动态折线图的效果 -
anbo724:
我的邮箱 anbo724@gmail.com谢谢@
achartengine画出动态折线图的效果 -
anbo724:
你好 请问有源码没《?谢谢
achartengine画出动态折线图的效果 -
weiday123:
额,觉得这个会不会占堆内存?
AdapterView、Adapter优化 -
wen742538485:
为什么没有呢?权限没加还是发创建了给你删了再想创建?是不允许重 ...
Android中为你的应用程序添加桌面快捷方式
先说为什么需要讨论这个问题。
现在很多的手机应用,都可能会直接嵌入一个web页面。这样做的好处:一个是功能更新方便,维护起来容易,只需要维护服务器的页面即可,不需要更新客户端;另一个是功能通用,不仅android可以用,ios也可以用,symbian也可以直接用。
那为什么现在很多手机应用并不做成web方式的呢?原因很多。一个是现阶段web方式展现能力相对较弱,如果对于应用的美观程度要求比较高,就无法使用web方式;一个是web方式速度相对较慢,用户体验会受一些影响;一个是现阶段流量还是相对宝贵,web方式流量相对较大;还有一个就是有一些功能无法使用web方式实现(关于这一点,现在又很多开源的项目可以实现手机的一些硬件功能,比如拍照啊,获取通讯录啊,都是可以的,感兴趣的可以搜索一下phoneGap。但是从现有的反馈来看,速度较慢,体验较差)。
基于以上的原因,现在很多项目会把一部分功能做成web方式的,一部分功能用其它控件来写。这就需要web页面与其它控件做一些交互。如何交互呢,就是利用自定义的javascript。
下面虚拟一个场景。
现在有一个功能,展现当前用户的好友列表,好友列表页是web方式的,点击某好友的头像以后,进入该好友的详情页面,而这个页面呢,由于某些原因,没做成web方式的。
假设好友列表页是UserListActivity,包含一个webview。好友详情页面是UserDetailActivity,包含很多控件和业务逻辑。
我们以id来唯一标示用户。好友列表页中,点击每一个好友头像,都会调用:
onclick="javascript:android.user('1')"
类似这样的js语句。因本文主要介绍android,而不是web开发内容,所以具体不再详述,熟悉web开发的同学很容易理解。
我们现在需要做的,就是显示用户列表页面,然后在用户点击头像以后,响应具体的js请求,跳到该好友详细页面。
下面看看大概的实现方法。
默认情况下,在WebView中是不能使用javascript的。可以通过下面的代码:
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
使javascript功能可用。这部分代码都放在UserListActivity中的onCreate()方法里。
然后是注册JS接口。先看看webview的一个方法。
public void addJavascriptInterface (Object obj, String interfaceName)
Since: API Level 1
Use this function to bind an object to JavaScript so that the methods can be accessed from JavaScript.
IMPORTANT:
· Using addJavascriptInterface() allows JavaScript to control your application. This can be a very useful feature or a dangerous security issue. When the HTML in the WebView is untrustworthy (for example, part or all of the HTML is provided by some person or process), then an attacker could inject HTML that will execute your code and possibly any code of the attacker's choosing.
Do not use addJavascriptInterface() unless all of the HTML in this WebView was written by you.
· The Java object that is bound runs in another thread and not in the thread that it was constructed in.
Parameters
obj
The class instance to bind to JavaScript, null instances are ignored.
interfaceName
The name to used to expose the instance in JavaScript.
我们在UserListActivity类的onCreate()方法中增加如下语句:
mWebView.addJavascriptInterface(this, "android");
在UserListActivity类中增加如下方法:
public void user(String id) {
// 获取id,跳转activity。
}
这样当页面调用onclick="javascript:android.user('1')"语句的时候,就可以映射到UserListActivity对象的user()方法了。
这里user方法有一个参数,是要对应js语句的user(‘1’)。
下面附上所有代码。
Android部分的代码:
package com.arui.framework.android.js;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import com.arui.framework.R;
import com.arui.framework.android.js.UserDetailActivity;
public class UserListActivity extends Activity {
private WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.userlist);
mWebView = (WebView) findViewById(R.id.mywebview);
WebSettings webSetting = mWebView.getSettings();
//设置js可用
webSetting.setJavaScriptEnabled(true);
// 添加js调用接口
mWebView.addJavascriptInterface(this, "android");
//载入具体的web地址
mWebView.loadUrl("http://blog.csdn.net/arui319");
mWebView.setVisibility(View.VISIBLE);
mWebView.requestFocus();
}
public void user(String id) {
//跳转activity
Intent intent = new Intent(this, UserDetailActivity.class);
intent.putExtra("id", id);
startActivity(intent);
}
}
资源文件:
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><webview android:id="@+id/mywebview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone"></webview></linearlayout>
Web页面的局部代码:
<img src="%E2%80%A6%E2%80%A6">
---------------------------------------------------------------------------
GL(arui319)
http://blog.csdn.net/arui319
现在很多的手机应用,都可能会直接嵌入一个web页面。这样做的好处:一个是功能更新方便,维护起来容易,只需要维护服务器的页面即可,不需要更新客户端;另一个是功能通用,不仅android可以用,ios也可以用,symbian也可以直接用。
那为什么现在很多手机应用并不做成web方式的呢?原因很多。一个是现阶段web方式展现能力相对较弱,如果对于应用的美观程度要求比较高,就无法使用web方式;一个是web方式速度相对较慢,用户体验会受一些影响;一个是现阶段流量还是相对宝贵,web方式流量相对较大;还有一个就是有一些功能无法使用web方式实现(关于这一点,现在又很多开源的项目可以实现手机的一些硬件功能,比如拍照啊,获取通讯录啊,都是可以的,感兴趣的可以搜索一下phoneGap。但是从现有的反馈来看,速度较慢,体验较差)。
基于以上的原因,现在很多项目会把一部分功能做成web方式的,一部分功能用其它控件来写。这就需要web页面与其它控件做一些交互。如何交互呢,就是利用自定义的javascript。
下面虚拟一个场景。
现在有一个功能,展现当前用户的好友列表,好友列表页是web方式的,点击某好友的头像以后,进入该好友的详情页面,而这个页面呢,由于某些原因,没做成web方式的。
假设好友列表页是UserListActivity,包含一个webview。好友详情页面是UserDetailActivity,包含很多控件和业务逻辑。
我们以id来唯一标示用户。好友列表页中,点击每一个好友头像,都会调用:
onclick="javascript:android.user('1')"
类似这样的js语句。因本文主要介绍android,而不是web开发内容,所以具体不再详述,熟悉web开发的同学很容易理解。
我们现在需要做的,就是显示用户列表页面,然后在用户点击头像以后,响应具体的js请求,跳到该好友详细页面。
下面看看大概的实现方法。
默认情况下,在WebView中是不能使用javascript的。可以通过下面的代码:
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
使javascript功能可用。这部分代码都放在UserListActivity中的onCreate()方法里。
然后是注册JS接口。先看看webview的一个方法。
public void addJavascriptInterface (Object obj, String interfaceName)
Since: API Level 1
Use this function to bind an object to JavaScript so that the methods can be accessed from JavaScript.
IMPORTANT:
· Using addJavascriptInterface() allows JavaScript to control your application. This can be a very useful feature or a dangerous security issue. When the HTML in the WebView is untrustworthy (for example, part or all of the HTML is provided by some person or process), then an attacker could inject HTML that will execute your code and possibly any code of the attacker's choosing.
Do not use addJavascriptInterface() unless all of the HTML in this WebView was written by you.
· The Java object that is bound runs in another thread and not in the thread that it was constructed in.
Parameters
obj
The class instance to bind to JavaScript, null instances are ignored.
interfaceName
The name to used to expose the instance in JavaScript.
我们在UserListActivity类的onCreate()方法中增加如下语句:
mWebView.addJavascriptInterface(this, "android");
在UserListActivity类中增加如下方法:
public void user(String id) {
// 获取id,跳转activity。
}
这样当页面调用onclick="javascript:android.user('1')"语句的时候,就可以映射到UserListActivity对象的user()方法了。
这里user方法有一个参数,是要对应js语句的user(‘1’)。
下面附上所有代码。
Android部分的代码:
package com.arui.framework.android.js;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import com.arui.framework.R;
import com.arui.framework.android.js.UserDetailActivity;
public class UserListActivity extends Activity {
private WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.userlist);
mWebView = (WebView) findViewById(R.id.mywebview);
WebSettings webSetting = mWebView.getSettings();
//设置js可用
webSetting.setJavaScriptEnabled(true);
// 添加js调用接口
mWebView.addJavascriptInterface(this, "android");
//载入具体的web地址
mWebView.loadUrl("http://blog.csdn.net/arui319");
mWebView.setVisibility(View.VISIBLE);
mWebView.requestFocus();
}
public void user(String id) {
//跳转activity
Intent intent = new Intent(this, UserDetailActivity.class);
intent.putExtra("id", id);
startActivity(intent);
}
}
资源文件:
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><webview android:id="@+id/mywebview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone"></webview></linearlayout>
Web页面的局部代码:
<img src="%E2%80%A6%E2%80%A6">
---------------------------------------------------------------------------
GL(arui319)
http://blog.csdn.net/arui319
发表评论
-
Android Tween动画之RotateAnimation实现图片不停旋转
2012-11-26 22:38 1093本文主要介绍Android中如何使用rotate实现图片不停旋 ... -
Android实现widget定时更新
2012-11-04 20:20 934在开发Android的widget时,第一个需要解决的问题就是 ... -
来自腾讯、谷歌、百度等名企的精选面试五十题
2012-10-07 23:08 942http://www.apkway.com/thread-90 ... -
Android 中Parcelable的作用
2012-09-24 09:53 885android提供了一种新的类型:Parcel。本类被用作封装 ... -
[Android算法] 【eoeAndroid索引】史上最牛最全android开发知识汇总
2012-09-13 09:33 1129http://www.eoeandroid.com/threa ... -
安卓航班推荐70个具有商业实战性的精品Android源码
2012-08-01 00:00 948http://www.apkway.com/thread-58 ... -
Android测试教程汇总
2012-08-02 14:51 1164http://www.apkway.com/thread-67 ... -
Service 与 Thread 的区别
2012-07-26 00:10 927Service 与 Thread 的区别 很多时候,你可能 ... -
android 使用百度地图画轨迹
2012-07-26 00:08 2652import android.content.Context ... -
android百度地图半径画圆
2012-07-26 00:07 2806Java代码 import android.content ... -
Android下获取开机时间
2012-07-26 00:05 1341我的思路是:程序里注册个广播接收器,接收开机启动的广播,当程序 ... -
android 高仿【优酷】圆盘旋转菜单 的实现
2012-07-26 00:03 1373MyAnimation.java Java代码 pack ... -
android 3D 转盘效果(附源码)
2012-07-25 23:41 1818一个仿3D的转盘效果,有倒影特效,旋转图标还可自动放大缩小。由 ... -
Android Thread
2012-07-23 10:47 1075创建新线程的常用方式: 1. 直接使用Thread创建 ... -
Android 通过手说tts中文语音包实现中文朗读
2012-07-22 17:09 1818Android 通过手说tts中文语音包实现中文朗读 ... -
Android 使用HTTPClient调用Web请求(查询手机号码区域)
2012-07-21 00:33 1270Android通过Apache HttpClient调用网上提 ... -
Android+struts2+JSON方式的手机开发
2012-07-21 00:14 1182http://topmanopensource.iteye.c ... -
android九宫格实现
2012-07-21 00:03 1020android九宫格实现,开始以为很复杂,其实只要知道了如何布 ... -
Android ListView圆角实现
2012-07-20 23:59 1229在android上开发项目,如 ... -
Android 将一个Activity转化为View显示出来
2012-07-19 10:27 2100最近看到好多opengl牛人写了些立方体,卷页之类的华丽的代码 ...
相关推荐
总结起来,Android中的WebView使用自定义JavaScript回调涉及的关键步骤包括: 1. 启用WebView的JavaScript支持。 2. 创建一个Java类,包含需要暴露给JavaScript的接口方法,并用`@JavascriptInterface`注解。 3. ...
在Android应用开发中,WebView是一个非常重要的组件,它允许我们加载和显示网页内容,甚至可以与原生界面进行交互,实现更加丰富的功能。本项目"Android中Webview与原生界面交互及二维码扫描功能实现"就是一个很好的...
本资源“Android应用源码之webview重载使用&自定义网址.zip”显然提供了一些示例代码,帮助开发者了解如何在Android中自定义和优化WebView的使用。以下是关于WebView重载和自定义网址的一些关键知识点: 1. **...
为了提高用户体验,你可以启用自定义的加载进度条,通过设置`WebView`的`setProgress`方法和`WebViewClient`的`onPageStarted`和`onPageFinished`回调: ```java ProgressBar progressBar = findViewById(R.id....
其中,`JavaScriptInterface`是自定义的Java类,包含处理JavaScript回调的方法。 三、图片手势操作 1. 添加手势识别器:Android提供了GestureDetector和ScaleGestureDetector来处理用户的滑动和缩放手势。首先,...
- 由于安全原因,不能直接在JavaScript中调用`@JavascriptInterface`注解的方法,所以通常使用`postMessage`和`addJavascriptInterface`结合的方式来实现JavaScript回调Java。 - **步骤**: 1. Android端创建一个...
综上所述,这个`WebViewDemo`项目展示了如何在Android应用中使用`WebView`加载本地HTML页面,并通过JavaScript Interface实现Java和JavaScript之间的通信,以及在HTML中动态生成和操作组件。这些技术对于构建混合式...
在这里,`evaluateJavascript()`的第一个参数是JavaScript代码,第二个参数是一个回调,用于处理JavaScript的返回结果。 在JavaScript端,我们可以像调用本地函数一样调用Android提供的接口,例如: ```...
例如,在`onReceivedSslError`或`onReceivedHttpError`回调中,可以判断错误类型并决定是否使用缓存。 二、替换加载前的默认图片样式 1. 自定义WebViewClient:通过重写`WebViewClient`的`shouldInterceptRequest`...
本文将详细介绍如何在Android中使用`WebView`来获取网页的源码,并封装成一个自定义的`ArthurWebView`组件。 首先,我们了解`WebView`的基本用法。`WebView`继承自`View`,主要通过以下步骤进行初始化: 1. 在布局...
在Android应用开发中,Webview是一个非常重要的组件,它允许我们加载并运行网页内容,甚至与JavaScript进行交互。本文将详细讲解如何在Android的Webview中调用相册和拍照功能,以实现H5与原生Android应用的深度集成...
重载通常涉及到自定义WebView的行为,如拦截加载请求、处理JavaScript回调等。以下是一些关键方法: 1. `WebViewClient`: 为WebView设置自定义的客户端,可以控制页面加载行为。 ```java webView.setWebViewClient...
5. 解析回调URL:从重定向URL中提取访问令牌和用户ID,然后使用这些信息与微博API进行数据交换。 6. 自定义UI:你可以通过覆盖WebView的默认样式,实现个性化授权页面的显示效果。例如,自定义加载动画、导航栏、...
- 设置WebChromeClient和WebViewClient:这两个客户端类用于处理网页加载过程中的各种回调事件,例如进度更新、权限请求、JavaScript对话框等。 2. **Web设置**: - 启用JavaScript:`webView.getSettings()....
2. **`WebViewClient`和`WebChromeClient`**: 这两个类提供了许多回调方法,如`onPageStarted()`, `onPageFinished()`, `onReceivedError()`等,用于监控和响应WebView的生命周期事件。通过重写这些方法,开发者可以...
1. **Promise或AsyncTask**:为了处理异步操作,你可以使用JavaScript的Promise或者在Android端使用AsyncTask来实现回调。 2. **MessageChannel**:另一种方法是通过建立消息通道,如`postMessage`和`onMessage`...
4. **WebView回调方法** - `WebViewClient`用于处理加载过程中的各种事件,例如页面开始加载、完成加载、错误处理等: ```java webView.setWebViewClient(new WebViewClient() { @Override public void ...