http://blog.csdn.net/hudashi/article/details/8176298/

一、启动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

    //如果是放到本程序的文件 可以先复制到/data/data/程序报名/src下 再解压到sdcard上

    //不能用file://android_assert寻找文件路径,因为到了 浏览器程序  浏览器程序 没有 android_assert路径下的文件

         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>
 
结束

webview和 内置浏览器的调用的更多相关文章

  1. 微信内置浏览器的JsAPI(WeixinJSBridge续)[转载]

    原文地址:  http://www.baidufe.com/item/f07a3be0b23b4c9606bb.html 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript ...

  2. 微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记

    微信内置浏览器的JsAPI(WeixinJSBridge续)_Alien的笔记 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView) ...

  3. 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏

    微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript Interface) ...

  4. 微信内置浏览器的JS API

    /**! * 微信内置浏览器的Javascript API,功能包括: * * 1.分享到微信朋友圈 * 2.分享给微信好友 * 3.分享到腾讯微博 * 4.新的分享接口,包含朋友圈.好友.微博的分享 ...

  5. 微信内置浏览器WebApp开发,踩坑 · Issue #31 · maxzhang/maxzhang.github.com · GitHub

    最近花6天时间完成了一个七夕的小活动,是一个简单的WebApp.由于我前期对面向微信的Web开发评估不足,导致开发过程十分艰难.写这篇文章总结下,惊醒自己未来不要再犯这样的错误. 问题: 1. 有些比 ...

  6. 【微网站开发】之微信内置浏览器API使用

    最近在写微网站,发现了微信内置浏览器的很多不称心的地方: 1.安卓版的微信内浏览器底部总是出现一个刷新.前进.后退的底部栏,宽度很大,导致屏幕显示尺寸被压缩 2.分享当前网站至朋友圈时,分享的图片一般 ...

  7. 微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone)

    微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone) 前言: 这是小菜博客的第三篇文章.一直认为自己可以表达的东西太过简单,难以上台面,总是吝啬地不肯写.就算是写,也不知道从何开始.在同事的 ...

  8. 开源的Android开发框架-------PowerFramework使用心得(三)内置浏览器BrowserActivity

    使用内置浏览器必须是引用源码的方式(因为jar中不能打包布局文件等资源).内置浏览器是一个继承自BaseActivity的普通Activity,使用WebView实现. 1.简单的打开内置浏览器 In ...

  9. 微信内置浏览器私有接口WeixinJSBridge介绍(转)

    这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友.分享函数.隐藏工具栏.隐藏三个点按钮等功能,需要的朋友可以参考下 微信网页进入,右上角有三个小点,没错, ...

随机推荐

  1. 自我提升mysql

    1.某字段更新 自增 1 update table set a=a+1 2.修改某一字段的数据类型 alter table "tablename" modify  "co ...

  2. android ant 多渠道批量打包

    注:本文转载于:http://blog.csdn.net/zz7zz7zz/article/details/8915701 前言: 利用ant 可实现多渠道,批量打包. 正文: 思想:通过循环更改An ...

  3. HttpServletRequest/HttpServletResponse乱码问题解决

    1.request.setCharacterEncoding只对POST请求起作用.GET请求用new String(paramterData.getBytes("iso8859-1&quo ...

  4. Data Pump(数据抽取)介绍

    从10g开始,Oracle提供更高效的Data Pump(即expdp/impdp)来进行数据的导入和导出,老的exp/imp还可以用,但已经不建议使用.注意:expdp/impdp和exp/imp之 ...

  5. linux知识点

    通过gui来使用通过api来使用通过cli来使用通过tui来使用 进程不在,但tcp连接还一直存在的解决办法--tcpkill命令 http://www.centoscn.com/CentOS/Int ...

  6. 关于malloc申请的动态内存的问题

    http://bbs.bccn.net/thread-331344-1-1.html #include<stdio.h>#include<stdlib.h>int main(v ...

  7. 如何破解海蜘蛛ISP6.1.5 极其isp运营商 v6.1.5

    海蜘蛛ISPV6.1.5,目前破解版本中最稳定的!破解步骤如下:一.安装完毕进控制台二.使用muddyboot登陆 密码(123456)三.输入root回车四.输入regtools回车五.在web控制 ...

  8. C#.NET vs2010中使用IrisSkin4.dll轻松实现WinForm窗体换肤功能

    IrisSkin2.dll是一款很不错的免费皮肤控件,利用它可以轻松的实现WinForm窗体换肤 然而IrisSkin2.dll只能在.NET Faremwork 4.0以及之前的版本使用,所以要在V ...

  9. nova分析(4)—— nova-cells

    cells的功能允许用户以更分散的方式去扩展OpenStack计算云而无需使用复杂的技术,比如数据库和消息队列的集群.它的目的是支持非常大规模的部署. 当启用了此功能,在OpenStack计算云中的主 ...

  10. css之伪类选择器:before :after(::before ::after)

    一.总结: ::before是在标签内容前面添加内容, ::after是在标签内容后面添加内容 ::before ::after与:before  :after的区别:css3中修订后的伪元素使用:: ...