• Android网页中tel,sms,mailTo,Intent,Market协议用法总结


     tel:协议---拨打电话

    <a href="tel:">调出拨号界面</a>

    <a href="tel:10086">调出拨号界面并输入号码</a>

    外部浏览器:直接支持打开

    webview不实现setWebViewClient:直接支持打开

    webview实现setWebViewClient:默认不支持,需要shouldOverrideUrlLoading方法中处理实现,

    if(url.startsWith("tel:"))
    {
    //直接调出界面,不需要权限
    Intent sendIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));

    startActivity(sendIntent); 

    或者

    //直接拨打,需要权限<uses-permission android:name="android.permission.CALL_PHONE"/>

    Intent sendIntent = new Intent(Intent.ACTION_CALL, Uri.parse(url));

    startActivity(sendIntent); 



    return true;//否则键盘回去,页面显示"找不到网页"
    }

    sms:协议---发送短信

    <a href="sms:">调出发短信界面</a></br>
    <a href="sms:10086">调出发短信界面显示号码</a></br>
    <a href="sms:10086?body=contents">调出发短信界面显示号码和发送内容</a></br>
    <a href="sms:10086&body=contents1">ios调出发短信界面显示号码和发送内容</a></br>
    <a href="sms:10086;10010?body=contents2">调出发短信界面给多个号码发内容</a><br/>
    <a href="sms:+10086?body=contents3">调出发短信界面显示号码 </a></br>
    <a href="sms:+10086;10010?body=contents4">调出发短信界面给多个号码发内容 </a><br/>

    <a href="smsto:10086">smsto10086</a></br>

    <!-- 发彩信 -->
    <a href="mms:10086">mms:10086</a></br>
    <a href="mmsto:10086"> mmsto:10086</a></br>

    外部浏览器:直接支持打开

    webview不实现setWebViewClient:直接支持打开

    webview实现setWebViewClient:默认不支持,需要shouldOverrideUrlLoading方法中处理实现, 

     if(url.startsWith("sms:")||url.startsWith("smsto:")||url.startsWith("mms:")||url.startsWith("mmsto:"))
    {
    //直接调出界面,不需要权限
    Intent sendIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(sendIntent);

    或者
    //打开短信页面,不需要权限
    Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url)); 
    startActivity(sendIntent); 

    或者

    //import android.telephony.SmsManager;

    SmsManager smsg=SmsManager.getDefault();//----看不到已发送信息。。。
    smsg.sendTextMessage("10086", null, "tttttt", null, null);

    ps:需要权限

    <uses-permission android:name="android.permission.SEND_SMS"/>

    或者

    ContentValues values = new ContentValues(); //---可以看到已发的信息
    values.put("address", "10086");
    values.put("body", "contents");
    ContentResolver contentResolver = getContentResolver();
    // 实验中两者都会在信息栏中保存所发的信息。
    contentResolver.insert(Uri.parse("content://sms/sent"), values);
    // contentResolver.insert(Uri.parse("content://sms/inbox"), values);

    ps:content:协议可以参考http://blog.sina.com.cn/s/blog_674fdbb501011lfi.html

    ps:需要权限

    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>




    return true;//否则键盘回去,页面显示"找不到网页"
    }

    mailto:协议---发送邮件

    <a href="mailto:122633753@qq.com?subject=主题&body=内容">发邮件主题和内容给某邮箱</a></br>
    <a href="mailto:122633753@qq.com,851342455@qq.com">发邮件给多人</a></br>
    <a href="mailto:?to=&subject=主题&body=内容">发邮件选联系人</a></br>

    外部浏览器:直接支持打开手机客户端

    webview不实现setWebViewClient:直接支持打开

    webview实现setWebViewClient:默认不支持,需要shouldOverrideUrlLoading方法中处理实现, 

    if(url.startsWith("mailto:"))
    {
    Intent mailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url)); //打开发邮件窗口
    startActivity(mailIntent);
    ps:需要权限     <uses-permission android:name="android.permission.SEND_TO"/>

    或者
    发送邮件支持多联系人,cc, bcc, body, subject等等,开始只是用Uri.parse(url)这样的方式,但是发现原生的邮箱对这个支持的不好,想到一中新的办法,把这些发送的内容都写到intent的extra中,这样就对应了。
    Intent mailIntent = new Intent(Intent.ACTION_SEND);
    // 可以试下“plain/text”与“text/plain”的区别
    mailIntent.setType("plain/text");
    String[] arrReceiver = { "10086@qq.com", "10086@qq.com" };
    String[] arrCc = { "10086@qq.com", "10086@qq.com" };
    String[] arrBcc = { "10086@qq.com", "10086@qq.com" };
    String mailSubject = "MailSubject";
    String mailBody = "Mail Sodino Test";
    String attachPath = "file:///sdcard/UCDownloads/ATest.apk"; //添加附件
    mailIntent.putExtra(Intent.EXTRA_EMAIL, arrReceiver);
    mailIntent.putExtra(Intent.EXTRA_CC, arrCc);
    mailIntent.putExtra(Intent.EXTRA_BCC, arrBcc);
    mailIntent.putExtra(Intent.EXTRA_SUBJECT, mailSubject);
    mailIntent.putExtra(Intent.EXTRA_TEXT, mailBody);
    mailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(attachPath));
    mailIntent.setType("audio/mp3");
    startActivity(Intent.createChooser(mailIntent, "邮件发送中……"));

    return true;
    }

     ps:可以参考http://blog.csdn.net/sodino/article/details/5810481

    intent:协议---

    参考:

    用途:

    1 调用短信(无论在外部浏览器,还是在)

    这个没有data,能进入sms,但是有 //
    <a href="intent://?body=hello#Intent;scheme=sms;package=com.android.mms;end"> 短信1 </a> </br>
    这个能进入SMS,但是有 //
    <a href="intent://#Intent;scheme=sms;package=com.android.mms;end"> 短信2 </a> </br>
    这个完全没问题
    <a href="intent:555?body=hello#Intent;scheme=sms;package=com.android.mms;end">短信3 </a> </br>

    外部浏览器:直接支持打开

    webview不实现setWebViewClient:直接支持打开

    webview实现setWebViewClient:默认不支持,需要shouldOverrideUrlLoading方法中处理实现, 

    if(url.startsWith("intent:"))
    {
    Intent intent = null;
    try {
    intent = Intent.getIntent("intent://?body=hello#Intent;scheme=sms;package=com.android.mms;end");
    } catch (URISyntaxException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    startActivity(intent);
    return true;
    }

    2 调出三方应用

    一 百度地图

    <a href="intent://map/marker?location=40.047669,116.313082&title=我的位置&content=百度奎科大厦&src=xxx|Browserxx#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end">地图标点 </a> </br>
    <a href="bdapp://map/marker?location=40.047669,116.313082&title=我的位置&content=百度奎科大厦&src=yourCompanyName|yourAppName">地图标点</a>

    外部浏览器:直接支持打开,如果没有安装,会调起应用商店 定位到百度地图

    webview不实现setWebViewClient:无法响应

    webview实现setWebViewClient:需要shouldOverrideUrlLoading方法中处理实现, 

    if(url.startsWith("intent:"))
    {
    Intent intent = null;
    try {
    intent = Intent.getIntent("intent://map/marker?location=40.047669,116.313082&title=我的位置&content=百度奎科大厦&src=xxx|Browserxx#Intent;scheme=bdapp;package=com.baidu.BaiduMap;end");
    } catch (URISyntaxException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    startActivity(intent); 
    return true;
    }

    ps:如果没有安装百度地图,是无效的

    类似豆瓣:

    <a href="intent://doubanmovie?#Intent;action=android.intent.action.VIEW;category=android.intent.category.DEFAULT;package=com.douban.movie;end"> 豆瓣 </a> </br>

    二 调出市场

    <a href="intent://details?id=com.tencent.mobileqq#Intent;scheme=market;package=com.xiaomi.market;end"> details?id=com.tencent.mobileqq </a> </br>

    <a href="intent://search?q=pname:com.tencent.mobileqq#Intent;scheme=market;package=com.xiaomi.market;end"> search?q=pname:com.tencent.mobileqq </a> </br>

    说明:已经安装有 小米市场 ,才有效果。。;浏览器可以直接支持。。

    <a href="intent://details?id=com.xiaojinniu.smalltaurus#Intent;scheme=market;package=com.xiaojinniu.smalltaurus;end"> downLoad </a>
    <a href="intent://?#Intent;scheme=market;action=android.intent.action.VIEW;package=com.xiaojinniu.smalltaurus;end"> 222 </a>

     说明:在外部浏览器打开就可以(uc和百度不行),放到webview中就不行。。

     三  自定义schema

    <a href="myapp://scan"> myapp:// </a> </br>
    <a href="zxing://scan/"> zxing://scan/ </a>

    ------这样的话,如果没有安装,就显示打不开网页  

    <a href="intent://scan#Intent;scheme=myapp;package=com.example.schematest1;end">myapp test </a> </br> 
    host 填 host=scan 的时候,下面这2种这样会吊起应用商店, 但是当host填空时,就能直接掉起 app 
    <a href="intent://#Intent;scheme=myapp;package=com.example.schematest1;end">myapp test </a> </br> 
    <a href="intent://?#Intent;scheme=myapp;package=com.example.schematest1;end">myapp test </a> </br> 
    <a href="intent://scan/#Intent;scheme=zxing;package=com.google.zxing.client.android;end"> Take a QR code </a> </br>

    ps:统一处理

    外部浏览器:直接支持打开,如果没有安装,会调起应用商店选择

    webview不实现setWebViewClient:无法响应链接

    webview实现setWebViewClient:无法响应链接

     参考:http://blog.csdn.net/shichaosong/article/details/12187403

    market:协议---调出手机中相关市场,直接定位到应用详情

    •只有2中用法(而且安卓系统默认支持):
    •Market://details?id=com.xiaojinniu.smalltaurus
    •http://market.android.com/details?id=com.xiaojinniu.smalltaurus

    外部浏览器:直接支持

    webview:直接支持(如果没有在shouldOverrideUrlLoading中屏蔽)

    权限添加:无

  • 相关阅读:
    《精通情绪》读书笔记
    绩效评估与绩效反馈
    数据分析报告格式zz
    学会谈判zz
    javascript中的双向绑定
    理解 DocumentFragment
    理解Object.defineProperty()
    Vue 改变数组中对象的属性不重新渲染View的解决方案
    ES6中Object.assign() 方法
    控制input输入框光标的位置
  • 原文地址:https://www.cnblogs.com/softwarelanguagebs/p/5490837.html
Copyright © 2020-2023  润新知