一開始的畫面 |
正在讀取網頁中 |
為取得網路的權限, 記得在Manifest.xml加上<uses-permission android:name="android.permission.INTERNET"/>, 按下ImageButton後會產生兩種結果:
1. 正確load到網頁->透過Handler關掉Progress
2. 沒有訊號or網路太慢->透過Handler關掉Progress
本範例設計超過15秒仍未載到網頁則判定為情況2., 然後用Toast提示user稍候再試.
另外在主程式中加入checkInternet(android.content.Context context)來判定Device目前有無網路服務, Manifest.xml要先加入<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>喔!
網頁讀取完畢!會主動關掉Progress哦 |
超過15秒了還沒下載完 |
package com.tsots.WebView_loadUrl; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ProgressBar; import android.widget.Toast; public class WebView_loadUrl extends Activity { Context context = WebView_loadUrl.this; ProgressDialog myDialog = null; ImageButton mImageButton1; EditText mEditText1; ProgressBar progressbar; WebView mWebView1; String TAG = "WebView_loadUrl.this"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mImageButton1 = (ImageButton)findViewById(R.id.myImageButton1); mEditText1 = (EditText)findViewById(R.id.myEditText1); mEditText1.setText("http://www.eprice.com.tw/"); progressbar = (ProgressBar) findViewById (R.id.progressbar1); mWebView1 = (WebView) findViewById(R.id.myWebView1); final String str_dialog_title = getResources().getString(R.string.str_dialog_title); mWebView1.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { handler.sendEmptyMessage(0); super.onPageFinished(view, url); } }); mImageButton1.setOnClickListener(new ImageButton.OnClickListener() { public void onClick(View arg0) { { //mImageButton1.setImageResource(R.drawable.ok_2); mImageButton1.setBackgroundDrawable(getResources().getDrawable(R.drawable.ok_2)); if (checkInternet(context) == true) { String strURI = (mEditText1.getText().toString()); progressbar.setVisibility(View.VISIBLE); myDialog = ProgressDialog.show ( context, str_dialog_title, getString(R.string.load)+strURI, true ); /* * 1. 當使用者按下button後, 顯示Progress Bar * 2. 擷取網路資料 * 需在Manifest.xml加入權限:INTERNET */ mWebView1.setVisibility(View.VISIBLE); mWebView1.loadUrl(strURI); fun_thread(); } else { Toast.makeText(context, getResources().getString(R.string.toast_check_network), Toast.LENGTH_SHORT).show(); } } } }); } public void fun_thread() { new Thread() { public void run() { try { //若15後仍未讀到網頁, 則顯示網路雍塞中 for(int i=0; i<15; i++) { sleep(1000); } } catch (Exception e) { e.printStackTrace(); } //為了能與handler建立關聯進而控制Progress Dialog / Progress Bar的關閉 Message m = new Message(); Bundle b = m.getData(); b.putInt("WHICH", 1); m.setData(b); handler.sendMessage(m); } }.start(); } /* * 透過Handler將Progress Dialog / Progress Bar關閉 */ Handler handler = new Handler() { public void handleMessage(Message msg) { int which = msg.getData().getInt("WHICH"); progressbar.setVisibility(View.GONE); myDialog.dismiss(); if(which == 1) { Toast.makeText(context, getString(R.string.str_busy), Toast.LENGTH_SHORT).show(); } } }; /* * 判別網路連線狀態 * 需在Manifest.xml加入權限:ACCESS_NETWORK_STATE */ public boolean checkInternet(android.content.Context context) { boolean result = false; ConnectivityManager connManager = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE); NetworkInfo info = connManager.getActiveNetworkInfo(); if (info == null || !info.isConnected()) { Log.d(TAG, "info == null || !info.isConnected()"); result = false; } else { if (!info.isAvailable()) { Log.d(TAG, "!info.isAvailable()"); result = false; } else { Log.d(TAG, "info.isAvailable()"); result = true; } } return result; } }
沒有留言:
張貼留言