显式Intent和隐式Intent区别

显式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和隐式Intent区别_第1张图片


显示Intent接收者: 

getIntent().+后面你传值类型

显式Intent和隐式Intent区别_第2张图片




隐式Intent的用法:没有固定的接收方

方式1 

Uri number = Uri.parse("tel:12345678"); 
//此处包含了uri,系统根据类型自动确定相应的MIME 类型,不需要setType()方法 
Intent callIntent = new Intent(Intent.ACTION_DIAL, number); 


方式2

//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 activities = packageManager.queryIntentActivities(mapIntent, 0); 
boolean isIntentSafe = activities.size() > 0; 
// Start an activity if it's safe 
if (isIntentSafe) { 
startActivity(mapIntent);}





你可能感兴趣的:(显式Intent和隐式Intent区别)