Intent 用法实例

intent 是一个保存着消息内容的Intent对 象。对于activity和服务来说,它指明了请求的操作名称以及作为操作对象的数据的URI和其它一些信息。比如说,它可以承载对一个activity 的请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收器而言,Intent对象指明了声明的行为。比如,它可以对所有感兴趣的对象声 明照相按钮被按下。

setType用来设置intent 里数据的类型,表示要查找文件的mime类型(如*/*),这个和组件在manifest里定义的相对应,但在源代码里:会将type设为null。

//这个类型函数是自己工具类的方法,你可以自己设置文件类型,例如图片文件:image/*
  //不想写类型直接*/*也是可以的
intent.setType(“audio/*”);

1.无参数Activity跳转
Intent it = new Intent(Activity.Main.this, Activity2.class);
startActivity(it);

2.向下一个Activity传递数据(使用Bundle和Intent.putExtras
Intent it = new Intent(Activity.Main.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString(“name”, “This is from MainActivity!”);
it.putExtras(bundle);       // it.putExtra(“test”, “shuju”);
startActivity(it);            // startActivityForResult(it,REQUEST_CODE);
对于数据的获取可以采用:
Bundle bundle=getIntent().getExtras();String name=bundle.getString(“name”);

3.向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)

如果它期望它所启动的那个 activity返回一个结果,它会以调用startActivityForResult()来取代startActivity()

如果它启动 了另外一个activity以使用户挑选一张照片,它也许想知道哪张照片被选中了。结果将会被封装在一个Intent对象中,并传递给发出调用的 activity的onActivityResult() 方法

Intent intent=getIntent();
Bundle bundle2=new Bundle();
bundle2.putString(“name”, “This is from ShowMsg!”);
intent.putExtras(bundle2);
setResult(RESULT_OK, intent);

4.回调上一个Activity的结果处理函数(onActivityResult)

Intent的两种基本用法

  • 一种是显式的Intent,即在构造Intent对象时就指定接收者;
  • 另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合。Android需要解析隐式Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service

Intent解析机制

主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、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,解析得到的目标组件必须至少包含这两个类别。

 // 调用浏览器  

    Uri webViewUri = Uri.parse("http://blog.csdn.net/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);
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: