Intent详解

Intent类主要是用来进行Activity间信息的传递,这包括同一个程序中的Activity和不同程序间的Activity。

同一个程序间通过Intent进行信息传递:

Intent intent=new Intent();
String data="Extra Data";
//通过这个方法可以给Intent附上数据,在另外的Activity中调用getExtra()获取数据就能实现数据间的传递。
/*
*参数1:是传递的数据的名字,实际上就是一个标识符,用来识别的。
*参数2:具体的数据,类型可以为基本类型(int,char,float等),也有string,boolean等,还可以通过*Bundle添加复杂的数据类型。
*/
intent.putExtra("data",data);
//setClass设置从哪一个activity跳转到哪一个actiity。
intent.setClass(MainActivity.this,OtherActivity.class);
//最后就是开始执行这个Intent意图。
startActivity(intent);

不同程序间通过Intent进行信息传递:

1.在不同的程序中的AndioidMainfest.xml文件通过Intent过滤器中指定了Activity能够接受的Intent的信息。

<activity android:name=".ui.MyActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

在这个配置文件中,指明.ui.MyActivity能接受的Intent的相关信息。主要是有三个识别标志。
I.
该标签指定了Intent的行为。
II.
该标签指明了Intent的类别
III.
该标签指定了Intent所附带的数据信息的要求,在上面这段代码中一句要求为txt文件或者是图片文件。
可以为一个Activity指定多个过滤器,只要符合其中一个即可调用这个Activity。

2.在知道想要调用的Activity的Intent过滤器相关的信息后,就可以根据这些信息来设置Intent。

第一种:

Intent sendIntent=new Intent();
//Intent.ACTION_SEND是Intent类中的一个静态变量,其值就是android.intent.action.SEND
sendIntent.setAction(Intent.ACTION_SEND);
//setData()方法的参数要求是一个Uri类型的数据,所以讲字符串解析为Uri类型。
Uri uri = Uri.parse("This is text");
sendIntent.setData(uri);
/*在startActivity中会自行的为sendIntent设置category为android.intent.category.DEFAULT,所以不用特意添加了。
*但这也是个坑,在我们自己为Activity设置Intent过滤器(intent-filter)时,一定要额外的添加
<category *android:name="android.intent.category.DEFAULT" />,即便我们设置了其他的category,否则会报错。
*/
startActivity(sendIntent);

第二种:

        Intent sendIntent=new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, "This is text");
        //这里是通过setType()来设置数据类型,它会将data设置为null,所以前面是通过putExtra来附加数据的
        sendIntent.setType("text/plain");
        startActivity(sendIntent);

我们能够调用其他Activity,当然也能够让其他的Activity调用。
1.首先就得设置要被调用的Activity的Intent过滤器
AndroidMainfest.xml文件

<activity android:name=".ui.MyActivity" >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SEND_MULTIPLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/*" />
    </intent-filter>
</activity>

2.在Activity文件中用java代码获得Intent所携带的数据

Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
        if ("text/plain".equals(type)) {
            //使用方法来获得数据
            String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
        } 
        //因为image/*是接受所有图片类型,png、jpeg等所以在判断时时判断前面一部分
        else if (type.startsWith("image/")) {

            Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
        }
    } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
        if (type.startsWith("image/")) {
            //Intent.ACTION_SEND_MULTIPLE是多种类型的数据。在传递时时使用ArrayList来存放,然后使用
            //putParcelableArrayListExtra来传递数据的,所以使用对应的getParcelableArrayListExtra来解析数据。
            ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
        }
    } else {

    }

更过信息请查看:http://hukai.me/android-training-course-in-chinese/basics/intents/filters.html
新手上路,还请斧正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值