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);

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 )

Google photo

You are commenting using your Google 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 )

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

John's Weblog

Just another WordPress.com weblog

I Am That I Am

Chasing tomorrow's sunrise.

%d bloggers like this: