1. 程式人生 > >Android程式中如何啟動瀏覽器

Android程式中如何啟動瀏覽器

本文參照自: http://blog.csdn.net/liws2010/article/details/7452957 一、 啟動android預設瀏覽器 在Android程式中我們可以通過傳送隱式Intent來啟動系統預設的瀏覽器。如果手機本身安裝了多個瀏覽器而又沒有設定預設瀏覽器的話,系統將讓使用者選擇使用哪個瀏覽器來開啟連線。關於Intent的更多內容請參考《 常用Intent 示例1
 
   

 

        Intent
intent = new Intent ();         intent . setAction ( "android.intent.action.VIEW" );         Uri content_url = Uri . parse ( "http://www.163.com" );         intent
. setData ( content_url );         startActivity ( intent );

 

這樣子,android就可以呼叫起手機預設的瀏覽器訪問。 二、啟動指定瀏覽器 在Android程式中我們可以通過傳送顯式Intent來啟動指定的瀏覽器。 啟動Android原生瀏覽器 示例2
 
  

 

         
Intent intent = new Intent ();                  intent . setAction ( "android.intent.action.VIEW" );               Uri content_url = Uri . parse ( "http://www.163.com" );             intent . setData ( content_url );                     intent . setClassName ( "com.android.browser" , "com.android.browser.BrowserActivity" );             startActivity ( intent );

 

只要修改以 intent.setClassName(" com.android.browser "," com.android.browser.BrowserActivity "); 中相應的應用程式 packagename  和要啟動的 activity 即可啟動其他瀏覽器來 uc瀏覽器" " com.uc.browser ", " com.uc.browser.ActivityUpdate opera瀏覽器 :" com.opera.mini.android ", " com.opera.mini.android.Browser " qq瀏覽器 :" com.tencent.mtt ", " com.tencent.mtt.MainActivity " 三、使用瀏覽器開啟本地html檔案 開啟本地的html檔案的時候,一定要指定某個瀏覽器,而不能採用方式一來瀏覽。 示例3
 
  

 

          Intent intent = new Intent ();                  intent . setAction ( "android.intent.action.VIEW" );               Uri content_url = Uri . parse ( "file:///sdcard/robin.hu/help.html" );             intent . setData ( content_url );                     intent . setClassName ( "com.android.browser" , "com.android.browser.BrowserActivity" );             startActivity ( intent );

 

雖然網上很多文章說即使使用瀏覽器開啟本地的html檔案的時,檔案路徑不支援"files:",不應該使用
 
  

Uri.parse("file:///sdcard/robin.hu/help.html");  

這種形式而是應該使用
 
  

Uri content_url =Uri.parse("content://com.android.htmlfileprovider/sdcard/robin.hu/help.html");

但是 經過在HTC G10(Android2.3.5),Lenovo P770(Android4.0以上)測試,實際上只
 
  

Uri.parse("file:///sdcard/robin.hu/help.html");

這種形式能很好的工作。
 
  

Uri content_url =Uri.parse("content://com.android.htmlfileprovider/sdcard/robin.hu/help.html");

這種形式反而不能很好的工作 四、對使用瀏覽器開啟網頁的封裝 以下是 對使用瀏覽器開啟網頁的一些封裝
 
  

 

    static void startBrower ( Context context , String uri )     {         startBrower ( context , Uri . parse ( uri ));     }     static void startBrower ( Context context , Uri uri )     {           Intent intent = new Intent ();          intent . setAction ( "android.intent.action.VIEW" );           /*其實可以不用新增該Category*/          intent . addCategory ( "android.intent.category.BROWSABLE" );          intent . setData ( uri );            intent . addFlags ( Intent . FLAG_ACTIVITY_NEW_TASK );           /*如果想用瀏覽器開啟本地html檔案的話,則只能通過顯式intent啟動瀏覽器*/           boolean explicitMode = false ;           String scheme = uri . getScheme ();           if ( scheme != null && scheme . startsWith ( "file" )) {              explicitMode = true ;           }           if ( explicitMode ) {              intent . setClassName ( "com.android.browser" , "com.android.browser.BrowserActivity" );           } else {              intent . addCategory ( "android.intent.category.BROWSABLE" );           }          context . startActivity ( intent );     }     static void startBrower ( Context context , String uri , String packageName , String className )     {         startBrower ( context , Uri . parse ( uri ), packageName , className );     }     static void startBrower ( Context context , Uri uri , String packageName , String className )     {           Intent intent = new Intent ();          intent . setAction ( "android.intent.action.VIEW" );          intent . setData ( uri );            intent . addFlags ( Intent . FLAG_ACTIVITY_NEW_TASK );          intent . setClassName ( packageName , className );          context . startActivity ( intent );     }

 

五、Android原生瀏覽器的AndroidManifest.xml 以下是 Android 4.0原生瀏覽器的 AndroidManifest.xml 檔案
 
   

 

<manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.android.browser" >     <original-package android:name = "com.android.browser" />     <permission android:name = "com.android.browser.permission.PRELOAD"         android:label = "@string/permission_preload_label"         android:protectionLevel = "signatureOrSystem" />     <uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />     <uses-permission android:name = "android.permission.ACCESS_DOWNLOAD_MANAGER" />     <uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />     <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />     <uses-permission android:name = "android.permission.ACCESS_WIFI_STATE" />     <uses-permission android:name = "android.permission.GET_ACCOUNTS" />     <uses-permission android:name = "android.permission.USE_CREDENTIALS" />     <uses-permission android:name = "android.permission.INTERNET" />     <uses-permission android:name = "android.permission.NFC" />     <uses-permission android:name = "android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />     <uses-permission android:name = "android.permission.SET_WALLPAPER" />     <uses-permission android:name = "android.permission.WAKE_LOCK" />     <uses-permission android:name = "android.permission.WRITE_EXTERNAL_STORAGE" />     <uses-permission android:name = "android.permission.WRITE_SETTINGS" />     <uses-permission android:name = "android.permission.READ_SYNC_SETTINGS" />     <uses-permission android:name = "android.permission.WRITE_SYNC_SETTINGS" />     <uses-permission android:name = "android.permission.MANAGE_ACCOUNTS" />     <uses-permission android:name = "com.android.browser.permission.READ_HISTORY_BOOKMARKS" />     <uses-permission android:name = "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" />     <uses-permission android:name = "com.android.launcher.permission.INSTALL_SHORTCUT" />     <application   android:name = "Browser"                     android:label = "@string/application_name"                     android:icon = "@mipmap/ic_launcher_browser"                     android:backupAgent = ".BrowserBackupAgent"                     android:hardwareAccelerated = "true"                     android:taskAffinity = "android.task.browser" >         <provider android:name = ".provider.BrowserProvider2"                   android:authorities = "com.android.browser;browser"                   android:multiprocess = "true"                   android:readPermission = "com.android.browser.permission.READ_HISTORY_BOOKMARKS"                   android:writePermission = "com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" >             <path-permission android:path = "/bookmarks/search_suggest_query"                     android:readPermission = "android.permission.GLOBAL_SEARCH" />         </provider>         <activity android:name = "BrowserActivity"                   android:label = "@string/application_name"                   android:launchMode = "singleTask"                   android:alwaysRetainTaskState = "true"                   android:configChanges = "orientation|keyboardHidden|keyboard|screenSize"                   android:theme = "@style/BrowserTheme"                   android:windowSoftInputMode = "adjustResize" >             <intent-filter>                 <action android:name = "android.speech.action.VOICE_SEARCH_RESULTS" />                 <category android:name = "android.intent.category.DEFAULT" />             </intent-filter>             <!-- For these schemes were not particular MIME type has been                  supplied, we are a good candidate. -->             <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:scheme = "http" />                 <data android:scheme = "https" />                 <data android:scheme = "about" />                 <data android:scheme = "javascript" />             </intent-filter>             <!--  For these schemes where any of these particular MIME types                   have been supplied, we are a good candidate. -->             <intent-filter>                 <action android:name = "android.intent.action.VIEW" />                 <category android:name = "android.intent.category.BROWSABLE" />                 <category android:name = "android.intent.category.DEFAULT" />                 <data android:scheme = "http" />                 <data android:scheme = "https" />                 <data android:scheme = "inline" />                 <data android:mimeType = "text/html" />                 <data android:mimeType = "text/plain" />                 <data android:mimeType = "application/xhtml+xml" />                 <data android:mimeType = "application/vnd.wap.xhtml+xml" />             </intent-filter>             <!-- For viewing saved web archives. -->             <intent-filter>                 <action android:name = "android.intent.action.VIEW" />                 <category android:name = "android.intent.category.BROWSABLE" />                 <category android:name = "android.intent.category.DEFAULT" />                 <data android:scheme = "http" />                 <data android:scheme = "https" />                 <data android:scheme = "file" />                 <data android:mimeType = "application/x-webarchive-xml" />             </intent-filter>             <!-- Accept inbound NFC URLs at a low priority -->             <intent-filter android:priority = "-101" >                 <action android:name = "android.nfc.action.NDEF_DISCOVERED" />                 <category android:name = "android.intent.category.DEFAULT" />                 <data android:scheme = "http" />                 <data android:scheme = "https" />             </intent-filter>             <!-- We are also the main entry point of the browser. -->             <intent-filter>                 <action android:name = "android.intent.action.MAIN" />                 <category android:name = "android.intent.category.DEFAULT" />                 <category android:name = "android.intent.category.LAUNCHER" />                 <category android:name = "android.intent.category.BROWSABLE" />             </intent-filter>             <!-- The maps app is a much better experience, so it's not     &nbs