Android程式中如何啟動瀏覽器
阿新 • • 發佈:2018-12-22
本文參照自:
http://blog.csdn.net/liws2010/article/details/7452957
一、
啟動android預設瀏覽器
在Android程式中我們可以通過傳送隱式Intent來啟動系統預設的瀏覽器。如果手機本身安裝了多個瀏覽器而又沒有設定預設瀏覽器的話,系統將讓使用者選擇使用哪個瀏覽器來開啟連線。關於Intent的更多內容請參考《
常用Intent
》
示例1
intent
=
new
Intent
();
intent
.
setAction
(
"android.intent.action.VIEW"
);
Uri
content_url
=
Uri
.
parse
(
"http://www.163.com"
);
intent
.
setData
(
content_url
);
startActivity
(
intent
);
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
這樣子,android就可以呼叫起手機預設的瀏覽器訪問。 二、啟動指定瀏覽器 在Android程式中我們可以通過傳送顯式Intent來啟動指定的瀏覽器。 啟動Android原生瀏覽器 示例2
只要修改以 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