Android:通过意图启动其他程序、Uri、setAction、setData、setDataAndType

简介:

Uri、setAction、setData通过按钮启动其他程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//通过隐式意图启动其他程序
     private  void  btn2Click() //浏览某个网页
     {
         Intent intent =  new  Intent();
         intent.setAction(Intent.ACTION_VIEW);
         Uri data = Uri.parse( "http://www.163.com" );
         intent.setData(data);
         startActivity(intent);
     }
     private  void  btn1Click() //通过按钮启动拨号
     {
         Intent intent =  new  Intent();
         intent.setAction(Intent.ACTION_CALL); //自动拨号需要设置权限,CALL_PHONE
                                                  
         //intent.setAction(Intent.ACTION_DIAL);//跳转到拨号界面
         //Uri.fromFile(file)打开某个文件
         Uri data = Uri.parse( "tel:110" ); //号码的uri标示符格式
         intent.setData(data);
         startActivity(intent);
     }


btn1Click的XML权限配置:

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



通过隐式意图从一个项目启动另一个项目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//通过隐式意图从一个项目启动另一个项目
     private  void  btn1Click()
     {
         Intent intent =  new  Intent();
         //intent.setAction("com.example.aex60");
                       
         /**1.setData后,如果隐式意图里没有组件有设置data的filter,则fc错误。
          *2.setAction与setData并列关系(或的关系),隐式意图里两个都设置了,启动设置只要满足其一便能启动
          *3.setData(Uri.parse("http://"))设置这个默认可以启动浏览器
          *4.<data android:scheme="http" android:host="www.163.com" android:path="/note" mimeType="mnt/png"/>
          *   scheme="http":协议,data为Uri.parse("http:")
          *   host="www.163.com":地址
          *   path="/note":(类似)文件夹等,前面必须加/。
          *   mimeType="mnt/png":(类似)文件类型。
         
          *   scheme、host、path、mimeType是与的关系。
         
          *5.intent.setData(data);
          *  intent.setType("mnt/png"); 
          *  这两项不能分开写,需要使用 setDataAndType().
          *
          *6.intent.addCategory("xxxx.xxx");此方法可以增加过滤判断条件
          */
                       
//      Uri data = Uri.parse("http:");//浏览器协议要加":",scheme="http"
         Uri data = Uri.parse( "http://www.163.com/note" );
                       
//        intent.setData(data);
//        intent.setType("mnt/png");
         intent.setDataAndType(data,  "mnt/png" );
         startActivity(intent);
     }


另一个项目的XML配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version= "1.0"  encoding= "utf-8" ?>
<manifest xmlns:android= "http://schemas.android.com/apk/res/android"
     package = "com.example.aex60_2_intentfilter_data_componet"
     android:versionCode= "1"
     android:versionName= "1.0"  >
     <uses-sdk
         android:minSdkVersion= "8"
         android:targetSdkVersion= "16"  />
     <application
         android:allowBackup= "true"
         android:icon= "@drawable/ic_launcher"
         android:label= "@string/app_name"
         android:theme= "@style/AppTheme"  >
         <activity
             android:name= "com.example.aex60_2_intentfilter_data_componet.MainActivity"
             android:label= "@string/app_name"  >
             <intent-filter>
                 <action android:name= "android.intent.action.MAIN"  />
                 <category android:name= "android.intent.category.LAUNCHER"  />
             </intent-filter>
             <intent-filter>
                 <action android:name= "com.example.aex60"  />
                 <category android:name= "android.intent.category.DEFAULT"  />
                 <data android:scheme= "http"  android:host= "www.163.com"  android:path= "/note"
                     android:mimeType= "mnt/png" />
             </intent-filter>
         </activity>
     </application>
</manifest>




==============================================================

其他笔记:

1.发送邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      //建立Intent对象
      Intent intent =  new  Intent();
      //设置对象动作
      intent.setAction(Intent.ACTION_SEND);
      //设置对方邮件地址
      intent.putExtra(Intent.EXTRA_EMAIL,  new  String[]  
      "abc@com.cn" , "edf@com.cn"  }); 
      //设置标题内容
      intent.putExtra(Intent.EXTRA_SUBJECT,  "test" );
      //设置邮件文本内容
      intent.putExtra(Intent.EXTRA_TEXT,  "test mail" );
      启动一个新的ACTIVITY, "Sending mail..." 是在启动这个 
       ACTIVITY的等待时间时所显示的文字
      startActivity(Intent.createChooser(intent, "Sending  
      mail..."));


注:

1
createChooser()方法设置应用选择器.



2.启动邮箱客户端

1
2
3
4
5
6
7
8
9
10
     //启动邮箱客户端
     private  void  clickEmail()
     {
         Intent mIntent =  new  Intent();
         ComponentName comp =  new  ComponentName( "com.android.email" ,
                 "com.android.email.activity.Welcome" );
         mIntent.setComponent(comp);
         mIntent.setAction( "android.intent.action.MAIN" );
         startActivity(mIntent);
     }


3.直接到邮件发送界面

1
2
3
4
5
6
7
     //发送邮件
     private  void  clickEmail()
     {
         Uri uri = Uri.parse( "mailto:housebox@manjay.com" );
         Intent it =  new  Intent(Intent.ACTION_SENDTO, uri);
         startActivity(it);
     }


4.android直拨分机号码方法

在主机与分机号码之间加两到三个","即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public  class  MainActivity  extends  Activity
{
     
     @Override
     protected  void  onCreate(Bundle savedInstanceState)
     {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
        
         final  String num =  "@#!4$0^0*(_-7)0-0,1 2=34"  "转"  "80067" ;
         
         //正则保留数字和中文("转"),将"转"替换为",,"直拨分机号
         String regEx =  "[^0-9\u4e00-\u9fa5]+" ;
         Pattern p=Pattern.compile(regEx);
         Matcher m=p.matcher(num);
         String str = m.replaceAll( "" );
         final  String phone = str.replaceAll( "转" ",," );
         //输出结果:4007001234,,80067"
         
         
         
         final  TextView textView = (TextView) findViewById(R.id.textView1);
         findViewById(R.id.button1).setOnClickListener( new  OnClickListener()
         {
             @Override
             public  void  onClick(View v)
             {
                 textView.setText(phone);
                 callPhone(phone);
             }
         });
     }
     
     
     public  void  callPhone(String num)
     {
         Intent intent =  new  Intent();
         intent.setAction(Intent.ACTION_CALL); // 自动拨号需要设置权限,CALL_PHONE
         Uri data = Uri.parse( "tel:"  + num);
         intent.setData(data);
         startActivity(intent);
     }
     
}






本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1211562,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
7月前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
134 0
|
6月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
70 1
|
5月前
|
Oracle Java 关系型数据库
Android studio 安装以及第一个程序
Android studio 安装以及第一个程序
135 0
|
6月前
|
Java Android开发
程序与技术分享:Android使用Dagger注入的方式初始化对象的简单使用
程序与技术分享:Android使用Dagger注入的方式初始化对象的简单使用
152 0
|
6月前
|
安全 网络协议 网络安全
程序与技术分享:Android应用安全之数据传输安全
程序与技术分享:Android应用安全之数据传输安全
|
7月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
69 2
|
7月前
|
Android开发
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。
Android修改默认system/bin/下可执行程序拥有者和权限,使用实例,只有root和系统app权限才能执行某个命令。 【5月更文挑战第2天】
338 0
|
7月前
|
Linux 测试技术 Android开发
测试程序之UART 232/485适用于Android/Linux
测试程序之UART 232/485适用于Android/Linux
74 0
|
7月前
|
Android开发
Android Uri转File方法(适配android 10以上版本及android 10以下版本)
Android Uri转File方法(适配android 10以上版本及android 10以下版本)
811 0