• webview和 内置浏览器的调用


    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>
     
    结束
  • 相关阅读:
    rancher 2.X 搭建小型web集群+mysql主从复制
    harbor 仓库搭建
    k8s 集群搭建
    oracle sql命令
    IIS实现反向代理
    高并发的大型网站架构设计
    .net core集成vue
    使用TFS玩转Docker自动化部署
    动态创建IIS站点
    网站架构设计(草稿)
  • 原文地址:https://www.cnblogs.com/friends-wf/p/4563471.html
Copyright © 2020-2023  润新知