開啟網頁 + 檢查網路狀態


開啟網頁可用 Uri 搭配 Intent 來達成 , 如下

   1:  Uri uri = Uri.parse("http://vulpesadn.blogspot.tw/");
   2:  Intent intent = new Intent(Intent.ACTION_VIEW, uri);
   3:  startActivity(intent);


還要記得在 AndroidManifest.xml 加入網路許可
<uses-permission android:name="android.permission.INTERNET" />

開啟網頁在很多情況都會使用到,如離開程序之後強制連到官網, 或是在程序中有更多商品的選項時,都會直接連結到官網中,當然我們也能在連網之前先檢查網路狀態,在沒有連線的情況就能直接離開程序而不連到官網了

檢查網路狀態,必須加入存取網路許可
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

接著使用 ConnectivityManager 來取得 NetworkInfo 的 isConnected( ) 來取得連網狀態,如下
   1:  ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
   2:   
   3:  NetworkInfo ni = cm.getActiveNetworkInfo();
   4:  if (ni != null && ni.isConnected()) {
   5:   
   6:              Uri uri = Uri.parse("http://vulpesadn.blogspot.tw/");
   7:              Intent intent = new Intent(Intent.ACTION_VIEW, uri);
   8:              startActivity(intent);
   9:   
  10:  } else if (ni == null) {
  11:   
  12:              finish(); // exit program
  13:  }


第 1 行建立 ConnectivityManager cm 來取得連網狀態, getSystemService 為 Context 類別的方法
第 3 行取得 NetworkInfo ni 來判斷 ni 的狀態
第 4 行注意除了 ni.isConnected() 的判斷之外還要小心 ni 是否為 null
第 6 ~ 8 行就是開啟網頁的方法了
第 10 行若 ni == null 就離開程序

我把上述做法加到版權聲明的流程,整體程式碼如下
   1:  package com.example.helloworld;
   2:   
   3:  import android.app.Activity;
   4:  import android.content.Context;
   5:  import android.content.Intent;
   6:  import android.graphics.Typeface;
   7:  import android.net.ConnectivityManager;
   8:  import android.net.NetworkInfo;
   9:  import android.net.Uri;
  10:  import android.os.Bundle;
  11:  import android.view.Gravity;
  12:  import android.view.View;
  13:  import android.view.View.OnClickListener;
  14:  import android.webkit.WebView;
  15:  import android.widget.Button;
  16:  import android.widget.TextView;
  17:  import android.widget.Toast;
  18:   
  19:  public class MainActivity extends Activity {
  20:   
  21:      static final String tLog = "Trace Log";
  22:   
  23:      TextView tv; // init by xml use
  24:   
  25:      Button bYes; // enter button
  26:      Button bNo; // exit button
  27:   
  28:      @Override
  29:      public void onCreate(Bundle savedInstanceState) {
  30:   
  31:          super.onCreate(savedInstanceState);
  32:   
  33:          initByXml();
  34:   
  35:      }
  36:   
  37:      void initByXml() {
  38:          setContentView(R.layout.activity_main);
  39:          // TextView init
  40:          tv = (TextView) findViewById(R.id.textView1);// why can't cast to
  41:                                                          // TestTextView
  42:          tv.setTextColor(0xff888888); // set color
  43:          tv.setTextSize(18.0f); // set size
  44:          tv.setTypeface(Typeface.SERIF);// set typeface
  45:          tv.setText(R.string.copy_right);// change text
  46:          tv.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
  47:   
  48:          // ButtonYes init
  49:          bYes = (Button) findViewById(R.id.buttonYes); // get ButtonYes
  50:          OnClickListener bYesOc = new OnClickListener() { // build ButtonYes Listener
  51:   
  52:              @Override
  53:              public void onClick(View v) {
  54:                  // TODO Auto-generated method stub
  55:   
  56:                  Intent goAct = new Intent();// new a Intent
  57:                  goAct.setClass(MainActivity.this, GetDisplaySize.class); // set class
  58:                  startActivity(goAct); // start another Activity
  59:                  finish(); // exit program
  60:                  
  61:              }
  62:          };
  63:          bYes.setOnClickListener(bYesOc);// set ButtonYes Listener
  64:   
  65:          // ButtonNo init
  66:          bNo = (Button) findViewById(R.id.buttonNo); // get ButtonNo
  67:          bNo.setOnClickListener(new OnClickListener() { // build ButtonNo Listener
  68:   
  69:              @Override
  70:              public void onClick(View v) {
  71:                  // TODO Auto-generated method stub
  72:                  
  73:                  ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  74:   
  75:                  NetworkInfo ni = cm.getActiveNetworkInfo();
  76:                  if (ni != null && ni.isConnected()) {
  77:   
  78:                      Uri uri = Uri.parse("http://vulpesadn.blogspot.tw/");
  79:                      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  80:                      startActivity(intent);
  81:                      finish(); // exit program
  82:                  } else if (ni == null) {
  83:   
  84:                      finish(); // exit program
  85:                  }
  86:              }
  87:          });
  88:      }
  89:  }


結果為
在開啟網路的情況下按下離開會直接連到我的部落格


















沒有開啟網路的情況,就離開程序囉


















NetworkInfo 還能取得更多關於連網的詳細資料,如是否漫遊,連網的詳細資訊等等,不過離開程序後強制連到官網的做法有待商榷,畢竟這並不是好的方式,很容易造成使用者的反感!! 慎行!!






0 意見:

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews