因为其实是跨进程通信,所以这里构建和匹配分别是创建的两个应用。
构建
component
构建显式Intent需要指定Intent的component属性
intent.setComponent(new ComponentName("com.itheima28.explicit.intent.filte", "com.itheima28.explicit.intent.filte.CalcActivity"));
匹配
component
显式intent会匹配到特定的组件
当没有Activity匹配时,会报ActivityNoFoundException并异常终止。
(注意后面隐式意图时所使用的resolveActivity对显式意图始终不为null)
附上示例代码
Intent intent=new Intent();
intent.setComponent(new ComponentName("com.itheima28.explicit.intent.filte", "com.itheima28.explicit.intent.filte.CalcActivity"));
//另一种方式
//intent.setClassName("com.itheima28.explicit.intent.filte","com.itheima28.explicit.intent.filte.CalcActivity");//即使前面写了packageName,后面的className仍然要带包名
//另另一种方式
//intent=new Intent(this, CalcActivity.class);//在同一个程序当中还可以这样写
String name = etName.getText().toString().trim();
if(TextUtils.isEmpty(name)){
Toast.makeText(this, "请输入姓名", Toast.LENGTH_LONG).show();
return ;
}
intent.putExtra("name", name);
// if(intent.resolveActivity(getPackageManager()) != null) {//对于显式意图,此句代码始终不为null
startActivity(intent);
// }
另一个应用中
<!--要被不同的应用搜索到,需要加上exported属性-->
<activity
android:name="com.itheima28.explicit.intent.filte.CalcActivity"
android:exported="true">