1.通过要启动的Activity的类名直接启动一个Activity,假设要启动的Activity的类名为TestActivity。
java
Intent intent=new Intent();
intent.setClass(this,TestActivity.class);
context.startActivity(intent);
- 使用Action、Category等限制参数隐式启动Activity。
java
Intent intent = new Intent();
//启动配置的action为xx.action的Activity
intent.setAction("xx.action");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
3.使用包名获取启动Intent从而启动Activity。
java
public static void openApp(Context context,String packageName) {
//通过包名packageName获取启动Intent
Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
- 使用某包名packageName启动App。若当前App在后台,则将当前App拉起到前台,不改变源App的当前打开页面。若App未启动,则启动App到前台。
java
public static void startApp(Context context, String packageName) {
if (context == null || StringUtils.isBlank(packageName)) {
return;
}
String startupActivityClassName = Constants.EMPTY_STRING;
//根据包名获取启动Activity类名
startupActivityClassName = getLauncherActivityNameByPackageName(context, packageName);
Class clazz = null;
try {
clazz = Class.forName(startupActivityClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
clazz = null;
}
if (clazz == null) {
return;
}
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClass(context, clazz);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
context.startActivity(intent);
}
//根据包名获取启动Activity类名
public static String getLauncherActivityNameByPackageName(Context context, String packageName) {
String className = Constants.EMPTY_STRING;
try {
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);//android.intent.action.MAIN
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);//android.intent.category.LAUNCHER
resolveIntent.setPackage(packageName);
//通过限制条件获取符合条件的app信息
List<ResolveInfo> resolveinfoList = context.getPackageManager().queryIntentActivities(resolveIntent, 0);
ResolveInfo resolveinfo = resolveinfoList.iterator().next();
if (resolveinfo != null) {
className = resolveinfo.activityInfo.name;
}
} catch (Exception e) {
e.printStackTrace();
className = Constants.EMPTY_STRING;
}
return className;
}
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!