通过包名和类名启动应用程序报错

本文介绍了解决Android应用程序中启动特定Activity时遇到的权限拒绝问题的方法。通过在清单文件中将对应Activity的exported属性设置为true,可以允许跨应用启动。此外,文章还解释了exported属性的作用及如何通过包名启动应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent intent = new Intent();
            // 通过包名和类名来启动应用程序
            intent.setComponent(new ComponentName(packageName, activityName));
            startActivity(intent);//269行代码

报下面错误:04-29 09:22:51.758: W/dalvikvm(4407): threadid=1: thread exiting with uncaught exception (group=0x41ef6ba8)
04-29 09:22:51.758: W/ActivityManager(459): Permission Denial: starting Intent { act=android.intent.action.MAIN cmp=com.chomp.thinkinglauncher/.photo.MainGridviewAppActivity (has extras) } from ProcessRecord{42820ff8 4407:com.chomp.camera.activity/u0a82} (pid=4407, uid=10082) not exported from uid 10081

解决办法:
应用的清单文件中,对应的Activity加一个属性 expoted = "true",重装程序问解决。

原因是在frameworks/base/services/java/com/android/server/am/ActivityStack.java

如果直接设置了android:exported = "false" 。 即不能通过intent.setClass()启动这个Activity。
显示设置就是没有为这个Activity配置任何IntentFilter,默认也是android:exported = "false"。

查“not exported from uid”,它就没export让你用,就是不想让别人用。。。

//如果使用Context的startActivity方法的话,就需要开启一个新的task
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);


当然还可以直接通过包名启动
//packname 为目标程序包名
Intent intent = activity.getPackageManager().getLaunchIntentForPackage(packname);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
activity.startActivity(intent);


### Java 启动报错解决方案 当遇到 `错误: 找不到或无法加载主类` 时,通常意味着 JVM 尝试查找指定的主类失败。此类问题可能由多种原因引起,括但不限于类路径配置不正确、类名拼写错误或是编译后的 `.class` 文件缺失。 #### 可能的原因分析 1. **类名错误** 如果输入的类名称有误,则JVM将无法找到对应的`.class`文件[^2]。 2. **类路径设置不当** 当项目的结构较为复杂时,如果未将必要的库或模块加入到classpath中,也会导致同样的异常情况发生。对于IDEA中的项目而言,应当确认module settings下的Dependencies是否已含所有必需项;而对于命令行操作来说,则需确保使用了合适的参数来指明外部资源的位置[^1]。 3. **缺少编译步骤** 若源代码未经适当处理就被尝试执行,自然会因为不存在的目标文件而报错。特别是在涉及框架(如Spring Boot)的情况下,建议按照官方文档指引完成打流程后再部署运行[^4]。 #### 解决方法概述 针对上述提到的各种可能性,可以采取以下措施逐一排查: - 验证所提供的全限定类名无误; - 调整CLASSPATH环境变量或者利用 `-cp` 参数显式给出依赖关系; - 对于集成开发环境中创建的应用程序,请核查其构建配置,并考虑重新同步/刷新工程索引; - 使用Maven等工具辅助管理大型多模块化软件系统的生命周期活动——从清理旧版本制品直至最终发布上线整个过程都可借助这些自动化手段简化工作量并减少人为失误的概率。 ```bash # 清理并编译项目 mvn clean compile # 安装项目到本地仓库 mvn install # 运行 Spring Boot 应用 mvn spring-boot:run ``` 以上命令适用于基于Maven构建的Spring Boot应用程序,在其他场景下可根据实际情况调整具体的指令集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值