1.首先添加权限
2.在解析到响应标签的类中参考下面的代码,填写到相应的方法中:
public class MainActivity extends AppCompatActivity {
private TextView textView1;
private TextView textView2;
private TextView textView3;
private TextView textView4;
private TextView textView5;
private TextView textView6;
private String phone = "18811116666";//虚拟电话
private String sendto = "这是一条短信";
private String mailAdress = "[email protected]";//虚拟邮箱
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//直接拨打电话
textView1 = (TextView) findViewById(R.id.textview1);
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.CALL");
Uri uri = Uri.parse("tel:" + phone);
intent.setData(uri);
startActivity(intent);
}
});
//跳转到拨号页面
textView2 = (TextView) findViewById(R.id.textview2);
textView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.DIAL");
Uri uri = Uri.parse("tel:" + phone);
intent.setData(uri);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
//发送短信
textView3 = (TextView) findViewById(R.id.textview3);
textView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.SENDTO");
Uri uri = Uri.parse("smsto:" + phone);
intent.setData(uri);
intent.putExtra("sms_body", sendto);
startActivity(intent);
}
});
//发送邮件
textView4 = (TextView) findViewById(R.id.textview4);
textView4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//mailto:[email protected]
Uri uri = Uri.parse("mailto:"+mailAdress);
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(uri);
//data.putExtra(Intent.EXTRA_CC, "这是抄送人");
//data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
//data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(Intent.createChooser(data, "请选择邮件类应用"));
}
});
//跳转浏览器
textView5 = (TextView) findViewById(R.id.textview5);
textView5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
Uri uri = Uri.parse("https://blog.csdn.net/Wang_WY");
intent.setData(uri);
//指定特定浏览器
intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity");
startActivity(intent);
//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"
}
});
//系统设置
textView6 = (TextView) findViewById(R.id.textview6);
textView6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Settings.ACTION_SETTINGS);
startActivity(intent);
}
});
}
}
注意事项:
2.1.使用浏览器解析html后需要使用webview拨打加载网页中的电话超链接,如下所示:
wv_main = find(R.id.wv_main);//实例化webview
wv_main.loadUrl(url);
//启用支持javascript
WebSettings settings = wv_main.getSettings();
settings.setJavaScriptEnabled(true);
//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
wv_main.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.e("用户单击超连接", url);
//判断用户单击的是那个超连接
String tag = "tel";
if (url.contains(tag)) {
String mobile = url.substring(url.lastIndexOf("/") + 1);
Log.e("mobile----------->",mobile);
Intent mIntent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse(mobile);
mIntent.setData(data);
//Android6.0以后的动态获取打电话权限
if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
startActivity(mIntent);
//这个超连接,java已经处理了,webview不要处理
return true;
}else{
//申请权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE},1);
return true;
}
}
return true;
}
}
为适应Android6.0以前版本在manifest中添加打电话权限
2.2调用系统Email发送邮件:
在Android中,调用Email有三种类型的Intent:
Intent.ACTION_SENDTO 无附件的发送
Intent.ACTION_SEND 带附件的发送
Intent.ACTION_SEND_MULTIPLE 带有多附件的发送
a:必须使用Intent.ACTION_SENDTO,而不是Intent.ACTION_SEND。否则就会出现很多非邮箱类应用
b:必须用 : Uri uri = Uri.parse("mailto:"+mailAdress);
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
而不是 :Intent intent = new Intent(Intent.ACTION_SENDTO);
intent.putExtra(Intent.EXTRA_EMAIL, mailAdress);
否则找不到邮箱类应用。
当然,所谓的调用Email,只是说Email可以接收Intent并做这些事情,可能也有其他的应用程序实现了相关功能,所以在执行的时候,会出现选择框进行选择。
2.2.1 使用SENTTO发送
Intent data=new Intent(Intent.ACTION_SENDTO);
data.setData(Uri.parse("mailto:[email protected]"));
data.putExtra(Intent.EXTRA_SUBJECT, "这是标题");
data.putExtra(Intent.EXTRA_TEXT, "这是内容");
startActivity(data);
通过向Intent中putExtra来设定邮件的相关参数。
2.2.2 使用SEND发送
Intent intent = new Intent(Intent.ACTION_SEND);
String[] tos = { "[email protected]" };
String[] ccs = { "[email protected]" };
String[] bccs = {"[email protected]"};
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_BCC, bccs);
intent.putExtra(Intent.EXTRA_TEXT, "body");
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/a.jpg"));
intent.setType("image/*");
intent.setType("message/rfc882");
Intent.createChooser(intent, "Choose Email Client");
startActivity(intent);
很简单,发送邮件中,有收件者,抄送者,密送者。 也就是分别通过
Intent.EXTRA_EMAIL,
Intent.EXTRA_CC,
Intent.EXTRA_BCC
来进行putExtra来设定的,而单个附件的发送,则使用Intent.EXTRA_STREAM来设置附件的地址Uri。
2.2.3 使用SEND_MULTIPLE来进行多附件的发送
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
String[] tos = { "[email protected]" };
String[] ccs = { "[email protected]" };
intent.putExtra(Intent.EXTRA_EMAIL, tos);
intent.putExtra(Intent.EXTRA_CC, ccs);
intent.putExtra(Intent.EXTRA_TEXT, "body");
intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
ArrayList imageUris = new ArrayList();
imageUris.add(Uri.parse("file:///mnt/sdcard/a.jpg"));
imageUris.add(Uri.parse("file:///mnt/sdcard/b.jpg"));
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
intent.setType("image/*");
intent.setType("message/rfc882");
Intent.createChooser(intent, "Choose Email Client");
startActivity(intent);
发送多个附件,最主要的时候,通过putParcelableArrayListExtra将多个附件的Uri地址List设置进去就OK了。其实还是很简单的。
附件:其他常用的Intent
Uri | Action | 功能 | 备注 |
geo:latitude,longitude | Intent.ACTION_VIEW | 打开地图应用程序并显示指定的经纬度 | |
geo:0,0?q=street+address | Intent.ACTION_VIEW | 打开地图应用程序并显示指定的地址 | |
http://web_address | Intent.ACTION_VIEW | 打开浏览器程序并显示指定的URL | |
https://web_address | Intent.ACTION_VIEW | 打开浏览器程序并显示指定的URL | |
tel:phone_number | Intent.ACTION_CALL | 打开电话应用程序并拨打指定的电话号码 | |
tel:phone_number | Intent.ACTION_DIAL | 打开电话应用程序并拨下指定的电话号码 | |
voicemail: | Intent.ACTION_DIAL | 打开电话应用程序并拨下指定语音邮箱的电话号码 | |
plain_text | Intent.ACTION_WEB_SEARCH | 打开浏览器程序并使用Google搜索引擎搜索 |
以上内容参考了原链接:https://blog.csdn.net/weixin_37730482/article/details/76090876,后续在遇到新问题还会继续更新。