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
新手上路,还请斧正。