1、跳转Activity,可以直接显示调用,如下所示:
startActivity(new Intent(this,DemoActivity.class)); // Service的显式启动类似:startService(new Intent(this,DemoService.class));2、如果要调用不是自己应用的Activity,或者跳转的Activity是动态变化的,就可以使用包名+类名的方式显示调用,如下所示:
Intent intent = new Intent(); // 跳转到Activity:包名+类名 intent.setClassName("包名","类名"); startActivity(intent);但是如果目标Activity不存在岂不是很尴尬,所以需要判断目标Activity是否存在:
List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0); if (resolveInfos != null && resolveInfos.size() > 0) { // 存在此类名才跳转 }最后,包名+类名的方式显示调用实战代码如下:
Intent intent = new Intent(); intent.setClassName(getPackageName(), SPUtils.getInstance().getString(GlobalVar.SP_ATTR1_JUMPV_VIEW)); // 跳转到Activity:包名+类名 List<ResolveInfo> resolveInfos = getPackageManager().queryIntentActivities(intent, 0); if (resolveInfos != null && resolveInfos.size() > 0) { // 存在此类名才跳转 startActivity(intent); }1、隐式启动,如下所示:
startActivity(new Intent("约定好的action名")); // Service的隐式启动类似:startService(new Intent("约定好的action名"));2、 有时候和同事协同开发,对方想访问我其中的某个页面,就可以使用如下隐式调用方式:
前提:双方约定好action名,以及传参TAG等。
public static void openOtherActivity(Context context,int categoryId) { Intent intent = new Intent("约定好的action名"); List<ResolveInfo> resolveInfos = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (resolveInfos != null && resolveInfos .size() > 0) { intent.putExtra("传参TAG", categoryId); context.startActivity(intent); } else { Toast.makeText(context, "not found", Toast.LENGTH_SHORT).show(); } }