Android程序中如何启动浏览器
2015-07-29 17:33
375 查看
一、启动android默认浏览器
在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器。如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接。关于Intent的更多内容请参考《常用Intent》
示例1
这样子,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
虽然网上很多文章说即使使用浏览器打开本地的html文件的时,文件路径不支持"files:",不应该使用
这种形式而是应该使用
但是经过在HTC G10(Android2.3.5),Lenovo P770(Android4.0以上)测试,实际上只有
这种形式能很好的工作。
这种形式反而不能很好的工作
四、对使用浏览器打开网页的封装
以下是对使用浏览器打开网页的一些封装
五、Android原生浏览器的AndroidManifest.xml
以下是Android 4.0原生浏览器的AndroidManifest.xml文件
结束
在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 worth having this at all... especially for a demo! <intent-filter android:label="Map In Browser"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/postal-address" /> </intent-filter> --> <intent-filter> <action android:name="android.intent.action.WEB_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="" /> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.MEDIA_SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> <activity android:name="ShortcutActivity" android:theme="@style/ShortcutTheme" android:label="@string/shortcut_bookmark" android:icon="@mipmap/ic_launcher_shortcut_browser_bookmark"> <intent-filter> <action android:name="android.intent.action.CREATE_SHORTCUT" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="BrowserPreferencesPage" android:label="@string/menu_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="BookmarkSearch" android:label="@string/bookmarks_search" android:stateNotNeeded="true" android:theme="@android:style/Theme.NoDisplay" android:excludeFromRecents="true"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/bookmarks_searchable" /> </activity> <activity android:name="AddBookmarkPage" android:label="Save bookmark" android:theme="@style/DialogWhenLarge" android:configChanges="orientation|keyboardHidden|screenSize"> <intent-filter> <action android:name="android.intent.action.INSERT" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.dir/bookmark"/> </intent-filter> </activity> <activity android:name="ComboViewActivity"> </activity> <!-- Bookmark thumbnail homescreen widget --> <receiver android:name=".widget.BookmarkThumbnailWidgetProvider" android:label="@string/bookmarks"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> <action android:name="com.android.browser.BOOKMARK_APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/bookmarkthumbnailwidget_info" /> </receiver> <service android:name=".widget.BookmarkThumbnailWidgetService" android:permission="android.permission.BIND_REMOTEVIEWS" android:exported="false" /> <receiver android:name=".widget.BookmarkWidgetProxy" android:exported="false" /> <activity android:name=".widget.BookmarkWidgetConfigure" android:theme="@android:style/Theme.Holo.DialogWhenLarge"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE"/> </intent-filter> </activity> <!-- Makes .BrowserActivity the search target for any activity in Browser --> <meta-data android:name="android.app.default_searchable" android:value=".BrowserActivity" /> <!-- Application code for RLZ tracking. RLZ assigns non-unique, non-personally identifiable tracking labels to client products; these labels sometimes appear in Google search queries. See http://code.google.com/p/rlz for more info. This value signifies to the RLZ client that this application uses RLZ tracking. --> <meta-data android:name="com.google.android.partnersetup.RLZ_ACCESS_POINT" android:value="@string/rlz_access_point" /> <receiver android:name=".OpenDownloadReceiver"> <intent-filter> <action android:name="android.intent.action.DOWNLOAD_NOTIFICATION_CLICKED"/> </intent-filter> </receiver> <!-- For custom home pages (like most visited) --> <provider android:name=".homepages.HomeProvider" android:authorities="com.android.browser.home" android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS" android:exported="false" /> <receiver android:name=".AccountsChangedReceiver"> <intent-filter> <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" /> </intent-filter> </receiver> <receiver android:name=".PreloadRequestReceiver" android:permission="com.android.browser.permission.PRELOAD" > <intent-filter> <action android:name="android.intent.action.PRELOAD"/> <data android:scheme="http" /> </intent-filter> </receiver> <provider android:name=".provider.SnapshotProvider" android:authorities="com.android.browser.snapshots" android:exported="false" /> </application></manifest>
结束
相关文章推荐
- Android 5.0水波纹效果
- Android日常小问题收集库
- 兼容Android的水波纹效果
- Android Studio 模板(Template)定制
- 【Android】神奇的android:clipChildren属性
- android反编译
- Android MVP开发。
- Android调试命令总结
- Android 单元测试——AndroidTestCase
- android 时间大小比较
- Android指针管理:RefBase,SP,WP
- android之布局优化
- Android FindMyPhone功能模块的实现
- 八款常见的Android游戏引擎
- Android中关于Adapter的使用(中)SimpleAdapter
- Android中关于Adapter的使用(上)ArrayAdapter
- 拖拽RecyclerView
- Android Wifi简单管理与操作
- Android中关于Adapter的使用(下)BaseAdapter
- android INSTALL_FAILED_VERSION_DOWNGRADE 解决之道