显式Intent和隐式Intent区别
Intent译为意图, Intent 不仅可用于应用程序之间,也可用于应用程序内部的 Activity和Service 之间的交互.
Intent的基本用法:一种是显式的 Intent ,即在构造 Intent 对象时就指定接收者,另一种是隐式的 Intent ,即Intent 的发送者在构造 Intent 对象时,并不知道也不关心接收者是谁,有利于降低发送者和接收者之间的耦合.
显式Intent的用法:
public void sendMessage(View view) {
// Toast.makeText(MainActivity.this,R.string.toast,Toast.LENGTH_LONG).show();
Intent intent = new Intent(this, Main2Activity.class);
//比较常用的Intent方法
// intent.putExtra();
startActivity(intent);
}
Intent传值类型:
显示Intent接收者:
getIntent().+后面你传值类型
隐式Intent的用法:没有固定的接收方
方式1
Uri number = Uri.parse("tel:12345678");
//此处包含了uri,系统根据类型自动确定相应的MIME 类型,不需要setType()方法
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
//intent action属性
Intent intent = new Intent(Intent.ACTION_PICK);
//选择图片
intent.setType(“image/*”);
// intent.putExtra();
验证是否存在接收 Intent 的应用(适用于隐式Intent)
如果你调用了Intent,但设备上没有可用于处理 Intent 的应用,应用会崩溃.
//这是官方给出的:
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
startActivity(mapIntent);}