通过加载现有的Web页面来实现安卓应用的功能是一种常见的方法。
代码如下:
import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; import android.content.Intent; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn=(Button) findViewById(R.id.open_url); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Uri uri=Uri.parse("http://translate.google.cn/"); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); } }); } }
Uri.parse()方法返回的是一个URI类型,通过这个URI可以访问一个网络上的或者本地的资源。Intent()方法告诉系统调用哪个组件来打开这个URI。
Intent.ACTION_VIEW,指的是调用系统里面的浏览器来打开指定的网页。
这个网页会显示到浏览器打开的网页上。
-----------------------------------------------------------
更多的时候,我们希望页面能够在应用内部打开,以方便添加一些需要的功能。可使用WebView控件。
WebView是安卓的浏览器组件,负责打开HTML文件,setContent() 方法动态的添加布局,loadUrl()方法从网址加载一个页面,loadData()和loadDataWithBaseURL()方法都是从字符串来加载一个页面。
相关原型如下:
public void loadUrl(String url) {
}
public void loadData(String data, String mimeType, String encoding) {
}
public void loadDataWithBaseURL(String baseUrl, String data,
String mimeType, String encoding, String failUrl) {
}
data:数据字符串
mimeType:表明数据的MIME类型,如text/html
Encoding:数据的编码
注意:1、loadUrl方法在遇到错误网页的时候不会报出异常,且loadData方法不能处理js、https等格式的页面特效。如果需要检测页面异常,可以先对页面进行判定,使用loadDataWithBaseURL可以加载https等特殊页面。
2、打开的网页,当应用到某一些功能时,需要跳转到别的页面,这已经超出了应用的控制范围,如果希望应用仍然显示在该应用内部,可以使用webView的setWebViewClient()方法来解决这个问题。
3、为了更好地服务使用者,在很多情况下需要保存用户搜索过的页面。要实现这个功能,需要保存加载的页面。首先通过网址生成URL对象,然后打开链接,写入Buffer中,最后写入字符串中,方便进一步的处理。
--------------------------------------
// 保存加载过的页面 public void savahistory(String url){ try { URL newurl = new URL(url); URLConnection connect = newurl.openConnection(); DataInputStream dis=new DataInputStream(connect.getInputStream()); BufferedReader in=new BufferedReader(new InputStreamReader(dis, "UTF-8")); String html=""; String readLine=null; while((readLine=in.readLine())!=null){ html=html+readLine; Log.d("OpenWebViewActivity",readLine); } in.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } }
一定要加网络权限
添加权限的位置,一定要在application之前,否则在某些高版本的编译器中不能通过,或者没有效果。
<uses-permission android:name="android.permission.INTERNET"/>
--------------------------------------