常用方式就不详说了,无非是显式和隐式跳转。现在要说的是非常特殊的一种,经过查看intent的内部源码发现:intent有成员ComponentName,此类接受包名和类名两个字段作为参数。平时使用的显式调用即是这种方式的一种特殊调用
显式调用:
Intent intent = new Intent(this, TestActivity.class);
startActivity(intent);
特殊调用:
Intent intent = new Intent(“com.call.app”, "com.call.app.TestActivity");
startActivity(intent);
需要注意的是,TestActivity作为另一个应用里面的activity,能否调用成功,取决于AndroidManifest文件的下方属性 是否为 true
android:exported
true
”表示可以,“
false
”表示不可以。若为“
false
”,则 Activity 只能由同一应用的组件或使用同一用户 ID 的不同应用启动。
默认值取决于 Activity 是否包含 Intent 过滤器。没有任何过滤器意味着 Activity 只能通过指定其确切的类名称进行调用。 这意味着 Activity 专供应用内部使用(因为其他应用不知晓其类名称)。 因此,在这种情况下,默认值为“false
”。另一方面,至少存在一个过滤器意味着 Activity 专供外部使用,因此默认值为“true
”。
该属性并非限制 Activity 对其他应用开放度的唯一手段。 您还可以利用权限来限制哪些外部实体可以调用 Activity(请参阅 permission
属性)。