Android中正确启动一个页面的方法

1.通过要启动的Activity的类名直接启动一个Activity,假设要启动的Activity的类名为TestActivity。

java 复制代码
Intent intent=new Intent();

intent.setClass(this,TestActivity.class);

context.startActivity(intent);

  1. 使用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);

}

  1. 使用某包名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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

相关推荐
恋猫de小郭2 小时前
Android 限制侧载新进展,谷歌联合国内厂商推验证计划
android·前端·flutter
恋猫de小郭2 小时前
解读 Android 17 全新内存限制,有没有“豁免”后门?
android·前端·flutter
小bo波2 小时前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
蝎子莱莱爱打怪4 小时前
XZLL-IM干货系列 03|消息 ID 设计:一个 UUID 搞不定的事,我用两个 ID 解决了
后端·面试·开源
贾艺驰5 小时前
实战Android Framework: 新增一个系统权限
android
梯度不陡5 小时前
AI 到底能不能从零写软件?ProgramBench 和 RepoZero 给出了两种答案
前端·javascript·面试
胡萝卜术7 小时前
滑动窗口最大值:从暴力到单调队列,层层优化全解析
前端·javascript·面试
沉默王二9 小时前
面试结束后,我反问:“就面个实习至于上这么大强度吗?”面试官:“你对 RAG、Agent、MCP、Skill 理解得很到位,所以要求高一点。”
面试·agent·ai编程
alexhilton9 小时前
使用Android Archive进行打包
android·kotlin·android jetpack
badhope11 小时前
做了几年安卓开发,这些坑我帮你踩过了
android·android studio