Android 跳转电话、邮件、短信等系统页面

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,后续在遇到新问题还会继续更新。

你可能感兴趣的:(开发)