精华内容
下载资源
问答
  • 路由存储关联的“matchValue”参数,用于存储任意值(包括对象或函数) 如果返回的匹配不好(例如,如果第一个匹配不在数据库中),则可以恢复状态机评估 例子 var r = new Router ; r . addTemplate ( '...
  • 该模块包含VS Code及其扩展使用的URI实现。 它支持将字符串解析为scheme , authority , path , query和fragment URI组件,如下面所定义: : foo://example.com:8042/over/there?name=ferret#nose \_/ \______...
  • Rant 包含在 Java 文档中。 URI javaIsOkayWithThis = GetURI.orDieTryin(demonicUrl); 该方法包括以真实人类行为为模型的“深度学习”功能。 读取异常 修复异常中抱怨的事情 再试一次 意识到通过“修复” URL ...
  • 我们将利用一种称为数据URI方案的技术 ; 将图像和字体都编码为纯数据字符串,可以直接集成到您的标记和样式表中。 缩略图: Visual Idiot制作的Broccolidryiconsaniconsetitisfullof…图标 (我们将在一分钟内...

    web页面uri唤醒应用

    让我们看一下通过减少发出的HTTP请求的数量来提高网站的性能。 我们将利用一种称为数据URI方案的技术 ; 将图像和字体都编码为纯数据字符串,可以直接集成到您的标记和样式表中。

    缩略图: Visual Idiot制作的Broccolidryiconsaniconsetitisfullof…图标 (我们将在一分钟内使用这些图标。)


    随着Internet连接的速度越来越快,计算机功能越来越强大,网站性能通常是一种经常被忽视的最佳实践。 如今,确保您的网站运行良好对确保用户和搜索引擎的满意度至关重要。 尤其是在使用移动数据以及电量不足的电话和其他设备访问网站时。


    数据URI的内容,原因和方式

    在Webdesigntuts +之前,我们已经看过CSS Sprite Sheets:最佳实践,工具和有用的应用程序 ,演示了如何通过减少HTTP请求和减小整体图像文件大小来提高性能。 但是您知道吗,您可以仅使用ASCII文本字符串在HTML或CSS中表示图像(实际上是任何二进制数据)?

    该技术被称为数据URI方案,实际上并不是新技术。 尽管数据URI已有十多年的发展历史,但它们只是在最近才获得广泛使用,它具有广泛的浏览器兼容性并致力于提高站点性能。

    使用数据URI有什么好处?

    使用数据URI的主要好处是提高了性能。 您的浏览器会使用HTTP请求获取您网站中使用的所有资源。 这包括从样式表到JavaScript文件再到图像的所有内容。 无论Internet连接的速度如何,几乎所有浏览器都将一次并发HTTP请求的最大数量限制为一次最多两个,从而实际上导致了数据瓶颈。 需要发出的HTTP请求越多,站点的整体性能就越差。

    将图像数据合并到站点HTML或CSS中后,立即消除了浏览器获取其他资源的需要。 尽管通常认为原始的Base64编码数据比经过优化的对应数据(例如,图像)大33%,但是在进行gzip和CSS文件优化之后,文件大小的差异通常可以忽略不计。

    数据URI看起来像什么?

    数据URI本质上是编码为Base64格式的二进制数据,以及针对浏览器的一些其他信息,包括MIME类型,字符集和编码格式(Base64)。

    数据URI(以最简单的形式)如下所示:

    data:[][;charset=][;base64],

    要将数据URI用作嵌入式HTML图像,格式应如下所示:

    <img src="data:image/png;base64,<base64 data goes here>" alt="My Image" width="32" height="32" />

    要将数据URI用作CSS中的重复背景图像,格式如下:

    body {
        background-image:url('data:image/png;base64,');
        background-repeat: repeat;
    }

    或者,将背景元素与CSS速记结合起来:

    div.logo {
        background:url('data:image/png;base64,')
        no-repeat
        top left;
        margin:20px 10px 0 10px;
    }

    尽管我们使用图像来说明数据URI的用法,但几乎可以使用任何媒体,包括多媒体文件,字体(我们将很快看到)以及更多内容。

    如何使用数据URI

    好的,让我们通过几个示例开始实践。 让我们拍下一张图像(我从Subtle Patterns下载的重复拼贴),将其转换为Data URI,并使用CSS为网站或界面创建重复背景。

    Repeating Background Tile

    尽管数据URI看起来很时髦,但是创建一个的过程非常简单。

    首先,转到Web语义数据URI转换器,然后通过选择图像的文件位置并单击“转换图像”工具来上传图像:

    Web Semantics Data URI conversion tool

    处理后,如果向下滚动页面,您将看到此图像看起来像是base64编码的:

    Web Semantics Data URI conversion tool

    由于我们需要一个重复的项目背景,因此我们需要修改该工具提供给我们CSS。

    对于重复的背景,请复制并粘贴以下CSS:

    div.logo {
    background-repeat: repeat;
    background-image: url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAABkAAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjlCNDA1N0EyRkNEQzExRTE5NEEyOEY1NEFFMzlEMzVFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjlCNDA1N0EzRkNEQzExRTE5NEEyOEY1NEFFMzlEMzVFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OUI0MDU3QTBGQ0RDMTFFMTk0QTI4RjU0QUUzOUQzNUUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OUI0MDU3QTFGQ0RDMTFFMTk0QTI4RjU0QUUzOUQzNUUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEB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);
    }

    让我们举一个更简单的示例,将以下图像转换为Data URI并将其作为内嵌图像放入我们的标记中:

    Repeating Background Tile

    只需按照上述步骤将图像转换为base64编码图像,然后复制该工具生成HTML标记(从“作为图像”面板中),然后以与插入时相同的方式将其直接粘贴到HTML标记中常规的嵌入式图片。

    此示例的最终代码如下所示:

    <img width="110" height="58" title="" alt="" src="data:image/jpeg;base64,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" />

    何时使用数据URI(以及何时避免使用)

    关于何时使用数据URI替换站点资产的确实没有硬性规定,但是在选择是否使用数据URI时要考虑许多缺点和特殊性。

    • 如果您打算支持
    • 数据URI不会被浏览器缓存,因此即使已被浏览器呈现,它们也需要在每个页面上下载。
    • 数据URI最适合小型资源,但是它们可用于较大的资源(例如照片),而不会造成任何重大的性能损失(压缩后,它们比原始文件大2-3%)。 但是请注意,在下载整个资产之前,站点用户将看不到任何东西 ,这对于移动用户或Internet连接速度慢的用户可能是不希望的。
    • 数据URI使CSS和HTML文档看起来非常混乱。 对于大型站点和广泛的数据URI利用,样式表和标记变得更加难以阅读,导航和维护。
    • 每次更改资产(例如Spritesheet)时,都需要重新编码图像文件,从而在工作流程中添加更多步骤。

    Base64编码的图标字体

    您还记得我说过任何二进制数据都可以在数据URI方案中使用吗? 现在,我们已经研究了base64编码的图像,现在让我们看一下将图标字体转换为数据URI并在项目中实现它。

    实际上,数据URI非常适合图标字体,特别是如果您仅打算使用一些符号且文件大小较小的字体。

    我们将使用在线Web应用程序IcoMoon生成自定义字体集,输出数据URI并生成最终CSS代码。

    首先,转到IcoMoon网站,然后单击“开始使用应用程序”链接:

    IcoMoon Custom Font App

    接下来,浏览字体集以选择您的自定义图标字体,或者使用页面左上方的搜索字段查找与标签“注释”,“心脏”,“眼睛”和“搜索”匹配的字体。

    在此示例中,我使用了Visual Idiot的Broccolidry字体集

    Select Your Custom Font Set

    接下来,通过点击屏幕底部的“字体”按钮进入下载设置页面:

    Move the Font Download Settings Page

    在下载设置页面上,将基准更改为10%,单击设置图标以显示高级选项,然后选中“ Base64编码和嵌入CSS”复选框。 点击“保存”图标下载字体。

    Download Settings

    下载并提取了自定义字体后,您可以打开“ index.html”文件以查看字体及其unicode配对:

    Index.html allows you to view your font pairings

    使用自定义图标字体

    现在我们已经创建了自定义图标字体集,让我们看看如何在项目中使用它。

    首先,打开IcoMoon下载中提供的样式表,然后找到以下CSS。 由于游戏的名称是关于减少HTTP请求的,因此我们将复制所有提供CSS并将其粘贴到我们自己的主样式表中。

    <pre>@font-face {
        font-family: 'customFont';
        src: url(data:font/svg;charset=utf-8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+ClRoaXMgaXMgYSBjdXN0b20gU1ZHIGZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uCjEKPC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJjdXN0b21Gb250IiBob3Jpei1hZHYteD0iNTEyIiA+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSI1MTIiIGFzY2VudD0iNDYxIiBkZXNjZW50PSItNTEiIC8+CjxtaXNzaW5nLWdseXBoIGhvcml6LWFkdi14PSI1MTIiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMTsiIGQ9Ik0gNTA3LjQ0LTIuMjQ4YyA2LjA5Ni02LjA5NiwgNi4wOTYtMTUuOTg0LDAuMDAtMjIuMDk2bC0yMi4wOTYtMjIuMDk2CgljLTYuMTEyLTYuMDk2LTE2LjAwLTYuMDk2LTIyLjA5NiwwLjAwbC0xNTQuNjg4LDE1NC42ODhjLTEuNjgsMS42OC0yLjgwLDMuNjY0LTMuNTUyLDUuNzc2QyAyNzMuMjgsOTAuODQsIDIzNC4zMiw3Ny4wMCwgMTkyLjAwLDc3LjAwCglDIDg1Ljk2OCw3Ny4wMCwwLjAwLDE2Mi45NjgsMC4wMCwyNjkuMDBDMC4wMCwzNzUuMDMyLCA4NS45NjgsNDYxLjAwLCAxOTIuMDAsNDYxLjAwYyAxMDYuMDMyLDAuMDAsIDE5Mi4wMC04NS45NjgsIDE5Mi4wMC0xOTIuMDBjMC4wMC00Mi4zMi0xMy44NC04MS4yOC0zNy4wMjQtMTEzLjAwOAoJYyAyLjExMi0wLjc1MiwgNC4wOTYtMS44NTYsIDUuNzc2LTMuNTUyTCA1MDcuNDQtMi4yNDh6IE0gMTkyLjAwLDM5Ny4wMGMtNzAuNjg4LDAuMDAtMTI4LjAwLTU3LjMxMi0xMjguMDAtMTI4LjAwYzAuMDAtNzAuNjg4LCA1Ny4zMTItMTI4LjAwLCAxMjguMDAtMTI4LjAwcyAxMjguMDAsNTcuMzEyLCAxMjguMDAsMTI4LjAwCglDIDMyMC4wMCwzMzkuNjg4LCAyNjIuNjg4LDM5Ny4wMCwgMTkyLjAwLDM5Ny4wMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMjsiIGQ9Ik0gMjU2LjAwLDEzLjQ5NmMtMTAuMzg0LDAuMDAtMjUuNTg0LDExLjY4LTM1LjY2NCwxMi43NTJjLTI4Ljc1Mi0yNC4xMTItNTguNzA0LTUzLjEzNi05OS40MjQtNjguMjI0CgljLTE3Ljc3Ni03LjUzNi0zMy4wNC0xMS45MDQtMzcuMDA4LTcuMTUyYy01LjMyOCw2LjE5Mi0xMy4zNzYsMTQuNzg0LTE0LjgwLDE3LjA4OGMgMC4wOCwzLjQyNCwgNC4yMjQsMC43MiwgOC43MzYsNS41ODQKCWMgMjQuNTc2LDEwLjMzNiwgNDAuNDQ4LDM3LjAwOCwgNTEuMTIsNjkuNjE2QyA1MS45ODQsODEuNzM2LDAuMDAsMTU0LjEwNCwwLjAwLDIzNy4yMDhDMC4wMCwzNjAuNzQ0LCAxMTQuNjI0LDQ2MC45MDQsIDI1Ni4wMCw0NjAuOTA0cyAyNTYuMDAtMTAwLjE0NCwgMjU2LjAwLTIyMy42OTYKCVMgMzk3LjM3NiwxMy40OTYsIDI1Ni4wMCwxMy40OTZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjM7IiBkPSJNIDM2OC4wMCw0MjkuMDBjLTM4LjQ2NCwwLjAwLTY5LjI5Ni0xMy44MDgtOTYuNDgtNDEuMDA4Yy0wLjAxNi0wLjAxNi0wLjAzMi0wLjAzMi0wLjA0OC0wLjA0OAoJbC0wLjAxNiwwLjAwTCAyNTYuMDAsMzY4LjQ3MkwgMjQwLjU0NCwzODYuNzZjLTAuMDE2LDAuMDE2LTAuMDMyLDAuMDMyLTAuMDQ4LDAuMDQ4TCAyNDAuNDgsMzg2LjgwOCBsMC4wMCwwLjAwQyAyMTMuMjgsNDE0LjAyNCwgMTgyLjQ2NCw0MjkuMDAsIDE0NC4wMCw0MjkuMDBTIDY5LjM3Niw0MTQuMDI0LCA0Mi4xNzYsMzg2LjgyNAoJQyAxNC45OTIsMzU5LjYyNCwwLjAwLDMyMy40NjQsMC4wMCwyODUuMDBjMC4wMC0zOC40MzIsIDE0Ljk2LTc0LjU5MiwgNDIuMTI4LTEwMS43NzZMIDIzMy4yOC05LjUyOEMgMjM5LjI4LTE1LjU5MiwgMjQ3LjQ3Mi0xOS4wMCwgMjU2LjAwLTE5LjAwcyAxNi43MiwzLjQwOCwgMjIuNzIsOS40NzIKCWwgMTkxLjEzNiwxOTIuNzUyQyA0OTcuMDI0LDIxMC40MDgsIDUxMi4wMCwyNDYuNTUyLCA1MTIuMDAsMjg1LjAwYzAuMDAsMzguNDY0LTE0Ljk5Miw3NC42MjQtNDIuMTc2LDEwMS44MjRDIDQ0Mi42MjQsNDE0LjAyNCwgNDA2LjQ2NCw0MjkuMDAsIDM2OC4wMCw0MjkuMDBMIDM2OC4wMCw0MjkuMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjQ7IiBkPSJNIDI1Ni4wMCwzNjUuMDBDIDExNC42MDgsMzY1LjAwLDAuMDAsMjA1LjAwLDAuMDAsMjA1LjAwcyAxMTQuNjA4LTE2MC4wMCwgMjU2LjAwLTE2MC4wMHMgMjU2LjAwLDE2MC4wMCwgMjU2LjAwLDE2MC4wMFMgMzk3LjM5MiwzNjUuMDAsIDI1Ni4wMCwzNjUuMDB6IE0gMjU2LjAwLDEwOS4wMAoJCQljLTUzLjAwOCwwLjAwLTk2LjAwLDQyLjk5Mi05Ni4wMCw5Ni4wMHMgNDIuOTkyLDk2LjAwLCA5Ni4wMCw5Ni4wMHMgOTYuMDAtNDIuOTkyLCA5Ni4wMC05Ni4wMFMgMzA5LjAwOCwxMDkuMDAsIDI1Ni4wMCwxMDkuMDB6IE0gMjU2LjAwLDI2OS4wMGMtMzUuMzQ0LDAuMDAtNjQuMDAtMjguNjU2LTY0LjAwLTY0LjAwcyAyOC42NTYtNjQuMDAsIDY0LjAwLTY0LjAwcyA2NC4wMCwyOC42NTYsIDY0LjAwLDY0LjAwCgkJCVMgMjkxLjM0NCwyNjkuMDAsIDI1Ni4wMCwyNjkuMDB6IiAvPjwvZm9udD48L2RlZnM+PC9zdmc+) format('svg'),
             url(data:font/ttf;charset=utf-8;base64,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) format('truetype');
        font-weight: normal;
        font-style: normal;
    }

    这几行CSS现在将使您的自定义图标字体可以在所有现代浏览器上使用。 如果要支持IE9兼容模式和IE的旧版本,则需要添加一条附加规则(请注意,这将获取附加资源,但仅在用户代理请求时)。

    @font-face {
      font-family: 'customFont';
    <!-- IE9 Compatibility Mode -->
      src: url('../fonts/customFont.eot');
    <!-- Old IE Fix -->
        src: url('../fonts/customFont.eot?#iefix') format('embedded-opentype');
      font-weight: normal;
      font-style: normal;

    对这些IE修补程序感到好奇吗? Paul Irish在防弹@ font-face语法上有一篇很棒的博客文章。

    既然已经创建了规则,我们可以通过两种方式在设计中包括自定义字体,这两种方式都使用Unicode实体来引用相关的图标。 IcoMoon应用程序的优点在于,已经为我们生成了所有CSS,并可以将它们复制到我们的主样式表中,具体取决于我们决定使用哪种方法(或同时使用这两种方法)。

    使用图标字体:数据图标方法

    使用图标字体的第一种技术是数据图标方法,该方法使我们的标记保持美观和整洁,并且对屏幕阅读器友好

    假设我们要在页面的span元素内包含注释图标(在这种情况下,unicode值为&amp;#x22; )。

    我们HTML:

    <span data-icon="&#x22;" aria-hidden="true"></span>
    <!-- the aria-hidden attribute prevents screenreaders from trying to read the unicode -->

    相关CSS(直接从下载的IcoMoon样式表中获取)如下(注释是我的)。

    /* A :before pseudo element is created for any HTML element with the data-icon attribute */
    [data-icon]:before {
    
    /* Font family is set the name set in our @font-face rule */
    font-family: 'customFont';
    
    /* The content for the pseudo element is fetched from the HTML data-icon (e.g. &#x22;) */
    content: attr(data-icon);
    
    /* Additional instructions to screen readers (not universally recognised) */
    speak: none;
    
    /* Univeral font styling */
    font-weight: normal;
    -webkit-font-smoothing: antialiased;
    }
    
    span {
    /* Specific font-styling */
    font-size: 2em;
    color: #A2A2A2;
    padding:2px 5px 2px 5px;
    margin-right:5px;
    }

    尽管这种方法很好用且经过简化,并且避免了标记中的额外类膨胀,但对于可维护代码而言,它可能不是最佳选择。 除非您对Unicode字符的记忆既是百科全书的还是图片的,否则这种方法不会在HTML中包含任何提示您将显示哪个图标的信息。

    使用图标字体:附加的类方法

    作为一种替代方法,您可以选择在HTML中使用其他CSS类来显示图标。 这具有将语义,描述性信息直接输入到标记中的好处,从而增强了代码的可读性。

    要使用这种方法,请在HTML中添加带有IcoMoon样式表提供的类名称的元素:

    <span class="icon-comment"></span>

    我们CSS看起来像这样(评论是我的)。

    /* The rule will be applied to any HTML element with a class of 'icon-*l and sets a pseudo-element to the element */
    [class^="icon-"]:before, [class*=" icon-"]:before {
    
    /* Font family is set the name set in our @font-face rule */
    font-family: 'custom';
    font-style: normal;
    speak: none;
    font-weight: normal;
    -webkit-font-smoothing: antialiased;
    }
    
    .icon-comment:before {
    
    /* The content for the pseudo element is set in escaped unicode (i.e. &#x22; becomes '/22' ) */
    content: "\22";
    }

    现在,只需增加一些样式,您就可以轻松地在下一个项目中实现美观的图标字体-无需使资产树陷入其他资源的泥潭。


    结论

    感谢您抽出宝贵的时间来探索一些可以充分利用下一个项目的数据URI的方法。

    重要的是要记住,数据URI并不总是最好的解决方案。 尽管使用CSS3,SVG和图标字体比使用图像具有一些非常引人注目的好处(尤其是在响应式设计领域),但在base64中编码图像的好处却更加细微。 在考虑是否在下一个项目中使用数据URI时,要权衡加载时间和减少HTTP请求以及代码的可维护性-只需将数据URI作为工具箱中的另一个工具即可!

    您是否喜欢本教程,现在正渴望以更实际的方式开始使用这些技术? 请尽快关注新的优质内容,我们将广泛使用数据URI来创建轻量级的用户界面设计。 关注此空间!

    您如何在项目中使用图标字体和数据URI? 订阅并发表评论!

    翻译自: https://webdesign.tutsplus.com/articles/the-what-why-and-how-of-data-uris-in-web-design--webdesign-8648

    web页面uri唤醒应用

    展开全文
  • 在angular.js和URI.js之后包括angular-uri < script type =" text/javascript " src =" bower_components/angular-uri/angular-uri.js " > </ script > 用法 加载模块 angular . module ( 'app' , [ '...
  • 支持多达包括前缀和爆炸修饰符 强大的验证和错误报告 Java对象作为模板值 支持渲染日期值 模板表达验证 自定义对象扩展器 支持序列化器和反序列化器。 支持部分模板扩展 从1.1.1版开始,Handy URI模板通过了套件...
  • URL和URI(一)URL

    千次阅读 2018-09-27 15:47:24
    file参数应当以斜线开头,包括路径、文件名和可选的片段标识符。有可能会忘记最前面的斜线,这是一个很常见的错误。与所有URL构造函数一样,它可能会抛出MalformedURLException异常。 try { URL url = new URL...

    URL类

    public URL(String url) throws MalformedURLException
    public URL(String protocol, String host, int port, String file) throws MalformedURLException
    public URL(String protocol, String host, String file) throws MalformedURLException
    public URL(URL base,String relative) throws MalformedURLException
    

    使用哪个构造函数取决于你有哪些信息以及信息的形式;

    从字符串构造URL

    最简单的URL构造函数只接受一个字符串形式的绝对URL作为唯一的参数:

    public URL(String url) throws MalformedURLException在这里插入代码片
    

    例如:

    try {
    			URL url = new URL("http://www.baidu.com");
    		} catch (MalformedURLException e) {
    			System.out.println(e);
    		}
    

    由组成部分构造URL

    还可以通过指定协议、主机名和文件来构建一个URL:

    public URL(String protocol, String host, String file) throws MalformedURLException
    

    这个构造函数将端口设置为-1,所以会使用该协议的默认端口。file参数应当以斜线开头,包括路径、文件名和可选的片段标识符。有可能会忘记最前面的斜线,这是一个很常见的错误。与所有URL构造函数一样,它可能会抛出MalformedURLException异常。

        try {
    			URL url = new URL("http","www.eff.org","/blueribbon.html#intro");
    		} catch (MalformedURLException e) {
    			System.out.println(e);
    		}
    

    这会创建一个URL对象,指向http://www.eff.org/blueribbon.html#intro,并使用HTTP默认的端口(80)。
    在很少见的情况下,默认端口不正确时,还允许使用一个int显式指定端口:

       try {
    			URL url = new URL("http","www.eff.org","8000",/blueribbon.html#intro");
    		} catch (MalformedURLException e) {
    			System.out.println(e);
    		}
    

    构造相对URL

    这个构造函数根据相对URL和基础URL构建一个绝对URL:

    public URL(URL base,String relative) throws MalformedURLException
    

    在这里插入图片描述

       try {
    			URL url1 = new URL("http://www.ibiblio.org/javafaq.index.html");
    			URL url2 = new URL(url1, "mailinglists.html");
    		} catch (MalformedURLException e) {
    			System.out.println(e);
    		}
    

    从URL获取数据

    URL类有几个方法可以从URL获取数据:

    public final InputStream openStream() throws java.io.IOException
    public URLConnection openConnection() throws java.io.IOException
    public URLConnection openConnection(Proxy proxy) throws java.io.IOException
    public final Object getContent() throws java.io.IOException
    public final Object getContent(Class[] classes)throws java.io.IOException
    

    在这里插入图片描述

    public final InputStream openStream() throws java.io.IOException

    在这里插入图片描述

       try {
    			URL url1 = new URL("http://www.baidu.com");
    			InputStream stream = url1.openStream();
    			int c;
    			while((c = stream.read())!= -1)
    			{
    				System.out.write(c);
    			}
    		} catch (IOException e) {
    			System.out.println(e);
    		}
    

    控制台会输出源代码:
    在这里插入图片描述

    public URLConnection openConnection() throws java.io.IOException

    openConnection()方法为指定的URL打开一个socket,并返回一个URLConnection对象。URLConnection表示一个网络资源的打开的连接。如果调用失败,则openConnection()会抛出一个IOException异常;

      try {
    			URL url1 = new URL("http://www.baidu.com");
    			URLConnection uc = url1.openConnection();
    			InputStream stream = uc.getInputStream();
    			//从连接读取			
    		} catch (IOException e) {
    			System.out.println(e);
    		}
    

    在这里插入图片描述
    这个方法还有一个重载版本,可以指定通过哪个代理服务器传递连接:

    public URLConnection openConnection(Proxy proxy) throws java.io.IOException
    

    public final Object getContent() throws java.io.IOException

    在这里插入图片描述

    URL url1 = new URL("http://www.baidu.com");
    Object object = url1.getContent();
    //将Object强制转换为适当的类型
    //处理这个Object
    

    在这里插入图片描述
    下载一个对象:

    URL url1 = new URL("http://www.baidu.com");
    Object object = url1.getContent();
    System.out.println(object.getClass().getName());
    

    在这里插入图片描述
    具体的类可能因为Java的版本不同而有所区别:
    在这里插入图片描述

    public final Object getContent(Class[] classes)throws java.io.IOException

    getContent()方法的这个重载版本允许你选择希望将内容作为哪个类返回。这个方法尝试以第一种可用的格式返回URL的内容:

                URL url1 = new URL("http://www.baidu.com");
    			Class<?>[] types = new Class[3];
    			types[0] = String.class;
    			types[1] = Reader.class;
    			types[2] = InputStream.class;
    			Object object = url1.getContent(types);
    

    如果内容处理器知道如何返回资源的一个字符串表示,它就会返回一个String。如果它不知道如何返回资源的字符串表示,则返回Reader。倘若它也不知道如何将资源表示为一个读取器,那么它将返回InputStream。必须用instanceof检查返回的对象的类型:

    在这里插入图片描述

    分解URL

    URL由以下5部分组成:

    • 模式,也称为协议
    • 授权机构
    • 路径
    • 片段标识符
    • 查询字符串

    在这里插入图片描述
    public String getProtocol()
    getProtocol()方法返回一个String,其中包含URL的模式(如"http"、“https"或"file”):

    URL url1 = new URL("http://www.baidu.com");
    System.out.println(url1.getProtocol());    //输出http
    

    public String getHost()
    getHost()方法返回一个String,其中包含URL的主机名:

    URL url1 = new URL("http://www.baidu.com");
    System.out.println(url1.getHost());   //输出www.baidu.com
    

    public int getPort()
    在这里插入图片描述

    URL url1 = new URL("http://www.baidu.com");
    System.out.println(url1.getPort());   //输出-1
    

    public int getDefaultPort()
    在这里插入图片描述

    URL url1 = new URL("http://www.baidu.com");
    System.out.println(url1.getDefaultPort());   //输出80
    

    public String getFile()
    getFile()方法返回一个String。从主机名后的第一个斜线(/)一直到片段标识符#之前的字符,被认为是文件部分:

    URL url1 = new URL("http://www.baidu.com/test.html?name=yd&sex=man#");
    System.out.println(url1.getFile());   //输出/test.html?name=yd&sex=man
    

    public String getPath()
    与 getFile()相似,但它返回的String中不包含查询字符串:

    URL url1 = new URL("http://www.baidu.com/test.html?name=yd&sex=man#");
    System.out.println(url1.getPath());    //输出/test.html
    

    public String getRef()
    返回URL的片段标识符部分。如果URL没有片段标识符,则这个方法返回null:

    URL url1 = new URL("http://www.baidu.com/test.html?name=yd&sex=man#34546");
    System.out.println(url1.getRef());   //输出34546
    

    public String getQuery()
    返回URL的查询字符串。如果URL没有查询字符串,则这个方法返回null:

    URL url1 = new URL("http://www.baidu.com/test.html?name=yd&sex=man#34546");
    System.out.println(url1.getQuery());   //输出name=yd&sex=man
    

    public String getUserInfo()
    返回URL的用户信息。如果URL没有用户信息,则这个方法返回null:

    URL url1 = new URL("http://admin@www.baidu.com/test.html?name=yd&sex=man#34546");
    System.out.println(url1.getUserInfo());   //输出admin
    

    public String getAuthority()
    getAuthority()方法会以URL中的形式返回授权机构,可能有用户信息和端口,也可能没有:

    URL url1 = new URL("http://admin@www.baidu.com/test.html?name=yd&sex=man#34546");
    System.out.println(url1.getAuthority());   //输出admin@www.baidu.com
    

    相等性和比较

    在这里插入图片描述
    在这里插入图片描述
    URL类还有一个sameFile()方法,可以检查两个URL是否指向相同的资源:

    public boolean sameFile(URL other)
    

    在这里插入图片描述

    比较

    URL有三个方法可以将一个实例转换为另外一种形式,分别是toString()、toExternalForm()和toURI()。
    在这里插入图片描述
    最好toURI()方法将URL对象转换为对应的URI对象:

     public URI toURI() throws URISyntaxException
    

    以上只是学习所做的笔记!!!
    书籍:Java网络编程

    展开全文
  • 实现,包括 URIURI 引用。 目标 此 crate 的目标是提供用于有效创建、修改和解析 URI、相对引用和 URI 引用的类型。 下面分别介绍这三种类型。 什么是URIURI 代表统一资源标识符,用于标识某些资源。 好...
  • 包含URI中解析出的参数以及解析后剩余的URI“剩余”部分,这对于解析具有形成层次结构的多个相对URI模式的单个URI很有用。 Uri模板 UriTemplate是。 URI模板可用于从数据生成URI。 UriTemplates是从模板字符串...
  • Android中的URIUri

    万次阅读 2018-04-21 15:11:17
    一、URIUri大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?名称如此相像的两个类是有什么区别和联系?1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置...

    一、URI与Uri

    大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?

    名称如此相像的两个类是有什么区别和联系?

    • 1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需要。
    • 2.作用的不同。URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——Uniform Resource Identifier)实例。Uri类是一个不可改变的URI引用,包括一个URI和一些碎片,URI跟在“#”后面。建立并且转换URI引用。而且Uri类对无效的行为不敏感,对于无效的输入没有定义相应的行为,如果没有另外制定,它将返回垃圾而不是抛出一个异常。

    看不懂?没关系,知道这个就可以了:Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

    二、Uri结构

    (1)、基本形式:

    [html]  view plain  copy
    1. [scheme:]scheme-specific-part[#fragment]  
    这里分为三部分:
    scheme、scheme-specific-part、fragment

    (2)、进一步划分:

    如果进一步划分的话是这样子的

    [html]  view plain  copy
    1. [scheme:][//authority][path][?query][#fragment]  
    其中有下面几个规则:
    • path可以有多个,每个用/连接,比如
      scheme://authority/path1/path2/path3?query#fragment
    • query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
      scheme://authority/path1/path2/path3?id = 1#fragment,这里有一个参数id,它的值是1
    • query参数可以有多个,每个用&连接
      scheme://authority/path1/path2/path3?id = 1&name = mingming&old#fragment
      这里有三个参数:
      参数1:id,其值是:1
      参数2:name,其值是:mingming
      参数3:old,没有对它赋值,所以它的值是null
    • 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
      其中"path"可不要:scheme://authority?query#fragment
      其中"path"和"query"可都不要:scheme://authority#fragment
      其中"query"和"fragment"可都不要:scheme://authority/path
      "path","query","fragment"都不要:scheme://authority
      等等……

    (3)、终极划分

    其中authority,又可以分为host:port的形式,即再次划分后是这样的:

    [html]  view plain  copy
    1. [scheme:][//host:port][path][?query][#fragment]  
    所以这是划分最细的形式,其中host:port用冒号分隔,冒号前的是host,冒号后的port;

    三、示例

    经过上面的讲解,想必大家的Uri的结构就有所了解了,下面我们就实例看看各部分的识别方式。

    [html]  view plain  copy
    1. [scheme:]scheme-specific-part[#fragment]  
    2. [scheme:][//authority][path][?query][#fragment]  
    3. [scheme:][//host:port][path][?query][#fragment]  
    先列出这三种Uri形式,好让大家对比;
    针对下面一个Uri字符串来匹配一下各个部分:
    [java]  view plain  copy
    1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  
    • scheme:匹对上面的两个Uri标准形式,很容易看出在:前的部分是scheme,所以这个Uri字符串的sheme是:http
    • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之间的部分,也就是包括第二部分的[//authority][path][?query]这几个小部分,所在这个Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要带上//,因为除了[scheme:]和[#fragment]部分全部都是scheme-specific-part,当然包括最前面的//;
    • fragment:这个是更容易看出的,因为在最后用#分隔的部分就是fragment,所以这个Uri的fragment是:harvic
      下面就是对scheme-specific-part进行拆分了;
      在scheme-specific-part中,最前端的部分就是authority,?后面的部分是query,中间的部分就是path
    • authority:很容易看出scheme-specific-part最新端的部分是:www.java2s.com:8080
    • query:在scheme-specific-part中,?后的部分为:stove=10&path=32&id=4
    • path:在**query:**在scheme-specific-part中,除了authority和query其余都是path的部分:/yourpath/fileName.htm
      又由于authority又一步可以划分为host:port形式,其中host:port用冒号分隔,冒号前的是host,冒号后的是port,所以:
    • host:www.java2s.com
    • port:8080

    四、代码提取

    上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

    [java]  view plain  copy
    1. http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic  
    • getScheme() :获取Uri中的scheme字符串部分,在这里即,http
    • getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
    • getFragment():获取Uri中的Fragment部分,即harvic
    • getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
    • getPath():获取Uri中path部分,即/yourpath/fileName.htm
    • getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
    • getHost():获取Authority中的Host字符串,即www.java2s.com
    • getPost():获取Authority中的Port字符串,即8080
    另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

    • List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

    [java]  view plain  copy
    1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";  
    2. Uri mUri = Uri.parse(mUriStr);  
    3. List<String> pathSegList = mUri.getPathSegments();  
    4. for (String pathItem:pathSegList){  
    5.     Log.d("qijian","pathSegItem:"+pathItem);  
    6. }  
    打出来的列表为:

    • getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

    [java]  view plain  copy
    1. String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";  
    2. mUri = Uri.parse(mUriStr);  
    3. Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));  
    4. Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));  
    注意注意,我稍微更改了下字符串,把query中id的值去掉了!!!!!然后看看通过getQueryParameter("id")获取它的值会得到什么!
    结果如下:

    可以看到,在path中,即使针对某一个KEY不对它赋值是允许的,但在利用getQueryParameter()获取该KEY对应的值时,获取到的是null;

    五、扩展

    1、 绝对URI和相对URI

    绝对URI:以scheme组件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以对标识出现的环境无依赖的方式引用资源。 
    相对URI:不以scheme组件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以对依赖标识出现的环境有依赖的方式引用资源。 

    2、不透明URI和分层URI

    不透明URI: scheme-specific-part组件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI无需进行分解操作,因此不会对scheme-specific-part组件进行有效性验证。 
    分层URI: scheme-specific-part组件是以正斜杠(/)起始的,如http://fsjohnhuang.com。


    展开全文
  • Android中的Uri详解

    万次阅读 多人点赞 2019-10-30 11:06:07
    一、概述 通用资源标志符(Universal Resource Identifier, 简称"URI")。Uri代表要操作的数据,Android上可用的每种资源...从概念上来讲,URI包括URL。 Uri的通用格式为:scheme:scheme-specific-part#fragm...

    一、概述

            

              通用资源标志符(Universal Resource Identifier, 简称"URI")。Uri代表要操作的数据,Android上可用的每种资源 (图像、视频片段、网页等) 都可以用Uri来表示。从概念上来讲,URI包括URL。

              Uri的通用格式为:schemescheme-specific-part #fragment

    通常有下面三种形式

    1. scheme://authority path ?query #fragment
    2. scheme://host:port path ?query #fragment
    3. scheme:scheme-specific-part #fragment

    第一种用于访问本地资源,这里的scheme为content或者file,如:

    
    //访问通讯录中的某个联系人
    //会利用系统通讯录app提供的provider去读取联系人信息
    //从/data/data/com.android.providers.contacts/databases中的数据库表来访问
    
    content://contacts/people/5           
    
    //访问sdcard/download/目录下的音频文件
    //会利用系统提供的provider去读取文件
    //从/data/data/com.android.providers.media/databases中的数据库表中访问
    
    file:///sdcard/download/123.mp3 
    
    
                

    第二种用于访问网络资源,这里的scheme通常为http

    http://www.baidu.com

    第三种用于打电话等服务,这里的scheme通常为smsto和tel等

    tel:13512341234             //给13512341234打电话
    smsto:13512341234    //给135121341234发短信

     

    二、UriMatcher处理Uri

             UriMatcher 类用于匹配Uri

     使用步骤:

    public static final int BOOK_DIR = 0;
    public static final int BOOK_ITEM = 1;
    
    //第一步,初始化
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);  
    
    //第二步,注册待匹配的Uri
    matcher.addURI(AUTHORITY,"book",BOOK_DIR);
    matcher.addURI(AUTHORITY,"book/#",BOOK_ITEM);
    
    //第三步,进行匹配
    Uri uri = Uri.parse("content://" + "com.example.yy" + "/book");  
    int match = matcher.match(uri);  
           switch (match){
               case BOOK_DIR:  
                   return "vnd.android.cursor.dir/book";  
               case BOOK_ITEM:  
                   return "vnd.android.cursor.item/book";  
               default:  
                   return null;  
           }  
    //上面返回的是Uri对应的MIME

     总之,matcher.match(uri)方法返回的是一个整数,这个整数是之前注册的时候定好的,uri就好比一个请求,我们先安排好哪个请求进来要干什么,在ContentProvider的CRUD方法中利用match()方法去匹配uri,针对不同的返回值采取不同的CRUD操作。

     

    三、ContentUris处理Uri

    ContentUris 有两个作用

    • 为路径加上ID
    • 从Uri路径中获取ID

    1) 为Uri路径加上ID: withAppendedId(uri, id)

    //比如有这样一个Uri
    Uri uri = Uri.parse("content://com.example.yy/book");
    
    //通过ContentUris的withAppendedId()方法,为该Uri加上ID  
    Uri resultUri = ContentUris.withAppendedId(uri, 10);
    
    //最后resultUri为: 
    //content://com.example.yy/book/10

      2) 从Uri路径中获取ID---parseId(uri)

    Uri uri = Uri.parse("content://com.example.yy/book/10")  
    long bookId= ContentUris.parseId(uri);  

     

    四、uri与file、path相互转化

    1、uri转file:

    file = new File(new URI(uri.toString()));  

    2、file转uri:

    URI uri = file.toURI();  

    3、uri转path:

    private String getPath(Context context, Uri uri) {  
            String path = null;
            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
            if (cursor == null) {
                return null;
            }
            if (cursor.moveToFirst()) {
                try {
                    path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            cursor.close();
            return path;
     }  
    

    4、path转uri:

    Uri uri = Uri.parse(path);  

    5、file转path:

    String path = file.getPath();  

    6、path转file:

    File file = new File(path);

     

    五、常用Uri

    显示网页: 
      1. Uri uri = Uri.parse("http://www.google.com"); 
      2. Intent it = new Intent(Intent.ACTION_VIEW,uri); 
      3. startActivity(it); 
    
    显示地图: 
      1. Uri uri = Uri.parse("geo:38.899533,-77.036476"); 
      2. Intent it = new Intent(Intent.Action_VIEW,uri); 
      3. startActivity(it); 
    
    路径规划: 
      1. Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en"); 
      2. Intent it = new Intent(Intent.ACTION_VIEW,URI); 
      3. startActivity(it); 
    
    拨打电话: 
    调用拨号程序 
      1. Uri uri = Uri.parse("tel:xxxxxx"); 
      2. Intent it = new Intent(Intent.ACTION_DIAL, uri);   
      3. startActivity(it);   
      1. Uri uri = Uri.parse("tel.xxxxxx"); 
      2. Intent it =new Intent(Intent.ACTION_CALL,uri); 
      3. 要使用这个必须在配置文件中加入<uses-permission id="Android.permission.CALL_PHONE" /> 
    
    发送SMS/MMS 
    调用发送短信的程序 
      1. Intent it = new Intent(Intent.ACTION_VIEW); 
      2. it.putExtra("sms_body", "The SMS text"); 
      3. it.setType("vnd.android-dir/mms-sms"); 
      4. startActivity(it);   
    发送短信 
      1. Uri uri = Uri.parse("smsto:0800000123"); 
      2. Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
      3. it.putExtra("sms_body", "The SMS text"); 
      4. startActivity(it);   
    发送彩信 
      1. Uri uri = Uri.parse("content://media/external/images/media/23"); 
      2. Intent it = new Intent(Intent.ACTION_SEND); 
      3. it.putExtra("sms_body", "some text"); 
      4. it.putExtra(Intent.EXTRA_STREAM, uri); 
      5. it.setType("image/png"); 
      6. startActivity(it); 
    
    发送Email 
      1. 
      2. Uri uri = Uri.parse("mailto:xxx@abc.com"); 
      3. Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
      4. startActivity(it); 
      1. Intent it = new Intent(Intent.ACTION_SEND); 
      2. it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com"); 
      3. it.putExtra(Intent.EXTRA_TEXT, "The email body text"); 
      4. it.setType("text/plain"); 
      5. startActivity(Intent.createChooser(it, "Choose Email Client"));   
      1. Intent it=new Intent(Intent.ACTION_SEND);   
      2. String[] tos={"me@abc.com"};   
      3. String[] ccs={"you@abc.com"};   
      4. it.putExtra(Intent.EXTRA_EMAIL, tos);   
      5. it.putExtra(Intent.EXTRA_CC, ccs);   
      6. it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
      7. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
      8. it.setType("message/rfc822");   
      9. startActivity(Intent.createChooser(it, "Choose Email Client")); 
    
    添加附件 
      1. Intent it = new Intent(Intent.ACTION_SEND); 
      2. it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text"); 
      3. it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/mysong.mp3[/url]"); 
      4. sendIntent.setType("audio/mp3"); 
      5. startActivity(Intent.createChooser(it, "Choose Email Client")); 
    
    播放多媒体 
      1.   
      2. Intent it = new Intent(Intent.ACTION_VIEW); 
      3. Uri uri = Uri.parse("[url=]file:///sdcard/song.mp3[/url]"); 
      4. it.setDataAndType(uri, "audio/mp3"); 
      5. startActivity(it); 
      1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1"); 
      2. Intent it = new Intent(Intent.ACTION_VIEW, uri); 
      3. startActivity(it);   
    
    Uninstall 程序 
      1. Uri uri = Uri.fromParts("package", strPackageName, null); 
      2. Intent it = new Intent(Intent.ACTION_DELETE, uri); 
      3. startActivity(it); 
    
    //调用相册 
    public static final String MIME_TYPE_IMAGE_JPEG = "image/*"; 
    public static final int ACTIVITY_GET_IMAGE = 0; 
    Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); 
    getImage.addCategory(Intent.CATEGORY_OPENABLE); 
    getImage.setType(MIME_TYPE_IMAGE_JPEG); 
    startActivityForResult(getImage, ACTIVITY_GET_IMAGE); 
    
    //调用系统相机应用程序,并存储拍下来的照片 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    time = Calendar.getInstance().getTimeInMillis(); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment 
    .getExternalStorageDirectory().getAbsolutePath()+"/tucue", time + ".jpg"))); 
    startActivityForResult(intent, ACTIVITY_GET_CAMERA_IMAGE); 
    
    uninstall apk 
    /**未测试 
    Uri uninstallUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri); 
    */ 
    Uri packageURI = Uri.parse("package:"+wistatmap);   
    Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);   
    startActivity(uninstallIntent); 
    
    install apk 
    Uri installUri = Uri.fromParts("package", "xxx", null); 
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri); 
    play audio 
    Uri playUri = Uri.parse("[url=]file:///sdcard/download/everything.mp3[/url]"); 
    returnIt = new Intent(Intent.ACTION_VIEW, playUri); 
    
    //发送附件 
    Intent it = new Intent(Intent.ACTION_SEND);   
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
    it.putExtra(Intent.EXTRA_STREAM, "[url=]file:///sdcard/eoe.mp3[/url]");   
    sendIntent.setType("audio/mp3");   
    startActivity(Intent.createChooser(it, "Choose Email Client")); 
    
    //搜索应用 
    Uri uri = Uri.parse("market://search?q=pname:pkg_name");   
    Intent it = new Intent(Intent.ACTION_VIEW, uri);   
    startActivity(it);   
    //where pkg_name is the full package path for an application 
    
    //进入联系人页面 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(People.CONTENT_URI); 
    startActivity(intent); 
    
    //查看指定联系人 
    Uri personUri = ContentUris.withAppendedId(People.CONTENT_URI, info.id);//info.id联系人ID 
    Intent intent = new Intent(); 
    intent.setAction(Intent.ACTION_VIEW); 
    intent.setData(personUri);
    
    startActivity(intent); 

     

    展开全文
  • URL和URI(二)URI

    千次阅读 2018-09-27 17:10:08
    URI是对URL的抽象,不仅包括统一资源定位符(Uniform Resource Locator,URL)还包括统一资源名(Uniform Resource Names,URN)。实际使用的URI大多是URL,正常情况下,假如你想下载一个URL的内容,应当使用URL类,...
  • Javascript URI 解析介绍

    2020-12-03 00:32:18
    URI包括确定语法和相关协议的方案所定义。 引自网络上对于URI组成的解释,而这些可以在稍后对于URI的解析中看出来。 URI一般由三部分组成: 1.访问资源的命名机制。 2.存放资源的主机名。 3.资源自身的名称,由...
  • Uri.Authority 和 Uri.Host 之间的区别?

    千次阅读 2020-06-21 16:14:47
    通俗理解就是 host 是 authority 的子串,authority 可以包含端口,而 host 不含端口。 看个栗子: ...
  • URI解析

    2019-05-24 14:57:18
    URI: Uniform Resource Identifer统一资源...资源存放的具体地址,包括目录和文件(资源自身的名称,由路径表) URI解析:“解析”一个URI意味着将一个相对URI引用转换为绝对形式,或者通过尝试获取一个可解引URI...
  • 为了在Kotlin.JVM项目中使用此库,请在gradle.build文件中包含gradle.build内容: repositories { mavenCentral() maven { url ' https://raw.githubusercontent.com/C06A/artifacts/libs-release ' } } ...
  • 虽然该库不再需要intl扩展名,但是如果您要处理包含非ASCII主机的URI,则强烈建议安装此扩展名。 没有它,如果使用这样的主机将引发异常。 依存关系 安装 $ composer require league/uri-schemes 文献资料 完整的...
  • RDF与URI

    2019-11-01 10:16:23
    理解URI的概念和写法 在学习jena RDF时,对三元组的书写格式不太理解,为什么都要写成http://somewhere/JohnSmith这种uri形式,下面把我对uri的学习坐下记录: URI :Uniform Resource Identifier,统一资源标识符...
  • 一个基于tensorflow和puppeteer的应用程序,它获取URI列表(每个请求最多10个),收集每个站点的缩略图屏幕截图,然后对所请求的URI是付费专区还是内容页面进行分类。 安装 该应用程序利用Python 3(tensorflow)和...
  • 基于 RFC-3986、PSR-7 和 PSR-17 的 PHP 7.1+(包括 PHP 8)的 URI 包装器 奖项 安装 composer require sunrise/uri 如何使用? use Sunrise \ Uri \ Uri ; use Sunrise \ Uri \ UriFactory ; // creates a new ...
  • Uri详解

    2019-08-27 22:59:47
    Android开发ContentProvider,里面有用到Uri,自己对对Uri是什么,怎么来的,这些都不是很熟悉,于是在网上找资料整理出本文。 一、URIUri 大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是...
  • 特此向任何人免费授予许可获取此软件和相关文档的副本文件(“软件”),在不限制,包括但不限于使用权, 复制、修改、合并、发布、分发、再许可和/或出售软件的副本,并允许接受该软件的人员提供软件是为了这样做...
  • URI 源码分析

    千次阅读 2017-07-27 09:53:39
    [URI、 URL 和 URN 的区别](http://www.jianshu.com/p/09ac6fc0f8cb)URI 引用包括最多三个部分:模式、模式特定部分和片段标识符。一般为: 模式:模式特定部分:片段 如果省略模式,这个URI引用则是相对的。如果...
  • nginx中,$request_uri和$uri的区别

    千次阅读 2020-07-09 08:46:25
    $request_uri This variable is equal to the original ... Look at uriforthepost−rewrite/alteredURI.Doesnotincludehostname.Example:"/foo/bar.php?arg=baz"这个变量等于从客户端发送来的原生请求URI包括参..
  • URI编码方法

    千次阅读 2017-04-19 19:08:12
    Global对象的encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()方法...有效的URI中不能包含某些字符,例如:空格、中文、+等,而以上两个编码方法可以对URI进行编码,它们用特殊的UTF-8编码替换所
  • Gateway网关中配置各个微服务的route,uri使用lb协议开启负载均衡功能,但是有些route可以正确的转发到对应的服务,有些route却无法转发到对应的服务,通过调试提示valid host。Gateway中route的配置部分示例如下: ...
  • SIP URI

    2020-10-15 08:55:39
    统一资源标识符(URI) USI指的是统一资源标识符。SIP使用多种URI。下表列出了常用的URIURI 方案 用法 规范 sip SIP RFC ...
  • nginx常见内置变量$uri和$request_uri

    万次阅读 2019-12-31 09:30:58
    这里介绍nginx常见内置变量uriuriuri和request_uri代表的值,首先先看nginx配置: [root@CentOS7-2 conf.d]# cat default.conf server { listen 80; server_name localhost; #charset koi8-r; #...
  • Uri与UriMatcher

    千次阅读 2018-07-15 17:41:31
    一.URI简介 概念:统一资源标识符(Uniform Resource Identifier) 组成部分: 1.访问资源的命名机制(scheme) 2.存放资源的主机名(authority) 3.资源自身的名称,由路径表示(path) 格式:scheme:// ...
  • 以上版权声明和此许可声明应包含在本软件的所有副本或大部分内容中。 本软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于对适销性,特定目的的适用性和非侵权性的担保。 无论是由于软件,使用或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 293,130
精华内容 117,252
关键字:

uri包含的内容