美文网首页
Android之Intent的使用

Android之Intent的使用

作者: 183207efd207 | 来源:发表于2016-12-19 16:38 被阅读0次
    一、介绍

    Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。

    二、常用的Action

    ACTION_CALL activity 启动一个电话.
    ACTION_EDIT activity 显示用户编辑的数据.
    ACTION_MAIN activity 作为Task中第一个Activity启动
    ACTION_SYNC activity 同步手机与数据服务器上的数据.
    ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
    ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
    ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
    ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告

    public class MainActivity extends Activity {  
        private Button getBtn;  
        @Override 
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
              
            getBtn=(Button)findViewById(R.id.getBtn);  
            getBtn.setOnClickListener(new OnClickListener() {  
                @Override 
                public void onClick(View v) {     
                    Intent intent = new Intent();                 
                    intent.setAction(Intent.ACTION_GET_CONTENT);// 设置Intent Action属性                  
                    intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性   
                                                                    //主要是获取通讯录的内容  
                    startActivity(intent); // 启动Activity  
                }  
            });          
        }  
    } 
    
    三、Intent的投递

    1.显式方式。直接设置目标组件的ComponentName,用于一个应用内部的消息传递,比如启动另一个Activity或者一个services。通过Intent的setComponent和setClass来制定目标组件的ComponentName。

    2.隐式方式。ComponentName为空,用于调用其他应用中的组件。需要包含足够的信息,这样系统才能根据这些信息使用intent filter在所有的组件中过滤action、data或者category来匹配目标组件。如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配;如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto: ) 进行匹配。同上,Intent 的scheme必须出现在目标组件的scheme列表中;如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如 Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。

    四、Intent调用常见系统组件
    // 调用浏览器
    Uri webViewUri = Uri.parse("http://blog.csdn<a href="http://lib.csdn.net/base/dotnet" class='replace_word' title=".NET知识库" target='_blank' style='color:#df3434; font-weight:bold;'>.NET</a>/zuolongsnail");
    Intent intent = new Intent(Intent.ACTION_VIEW, webViewUri);
    
    // 调用地图
    Uri mapUri = Uri.parse("geo:100,100");
    Intent intent = new Intent(Intent.ACTION_VIEW, mapUri);
    
    // 播放mp3
    Uri playUri = Uri.parse("file:///sdcard/test.mp3");
    Intent intent = new Intent(Intent.ACTION_VIEW, playUri);
    intent.setDataAndType(playUri, "audio/mp3");
    
    // 调用拨打电话
    Uri dialUri = Uri.parse("tel:10086");
    Intent intent = new Intent(Intent.ACTION_DIAL, dialUri);
    // 直接拨打电话,需要加上权限<uses-permission id="android.permission.CALL_PHONE" />
    Uri callUri = Uri.parse("tel:10086");
    Intent intent = new Intent(Intent.ACTION_CALL, callUri);
    
    // 调用发邮件(这里要事先配置好的系统Email,否则是调不出发邮件界面的)
    Uri emailUri = Uri.parse("mailto:zuolongsnail@163.com");
    Intent intent = new Intent(Intent.ACTION_SENDTO, emailUri);
    // 直接发邮件
    Intent intent = new Intent(Intent.ACTION_SEND);
    String[] tos = { "zuolongsnail@gmail.com" };
    String[] ccs = { "zuolongsnail@163.com" };
    intent.putExtra(Intent.EXTRA_EMAIL, tos);
    intent.putExtra(Intent.EXTRA_CC, ccs);
    intent.putExtra(Intent.EXTRA_TEXT, "the email text");
    intent.putExtra(Intent.EXTRA_SUBJECT, "subject");
    intent.setType("text/plain");
    Intent.createChooser(intent, "Choose Email Client");
    
    // 发短信
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.putExtra("sms_body", "the sms text");
    intent.setType("vnd.android-dir/mms-sms");
    // 直接发短信
    Uri smsToUri = Uri.parse("smsto:10086");
    Intent intent = new Intent(Intent.ACTION_SENDTO, smsToUri);
    intent.putExtra("sms_body", "the sms text");
    // 发彩信
    Uri mmsUri = Uri.parse("content://media/external/images/media/23");
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.putExtra("sms_body", "the sms text");
    intent.putExtra(Intent.EXTRA_STREAM, mmsUri);
    intent.setType("image/png");
    
    // 卸载应用
    Uri uninstallUri = Uri.fromParts("package", "com.app.test", null);
    Intent intent = new Intent(Intent.ACTION_DELETE, uninstallUri);
    // 安装应用
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(Uri.fromFile(new File("/sdcard/test.apk"), "application/vnd.android.package-archive");
    
    // 在Android Market中查找应用
    Uri uri = Uri.parse("market://search?q=愤怒的小鸟");         
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    

    相关文章

      网友评论

          本文标题: Android之Intent的使用

          本文链接:https://www.haomeiwen.com/subject/qputvttx.html