Android Studio应用无法启动Chrome报Parcel空字符串读取错误求助
问题根因定位
- 核心问题是Android 11(API 30及以上)的包可见性限制:从API 30开始,系统默认限制应用查询设备上其他已安装应用的信息,未在清单文件声明目标包名的前提下,调用
getLaunchIntentForPackage()会直接返回null,你直接将null传入startActivity()就会触发异常。 - 次要问题是代码缺少非空校验:就算目标应用未安装,
getLaunchIntentForPackage()也会返回null,未做判断直接调用会引发空指针崩溃。 - 你日志中输出的
libEGL、gift-manager相关报错和跳转逻辑无关,属于设备厂商系统、渲染模块的常规日志,不需要处理。
修复步骤
1. 声明包查询权限
在你的AndroidManifest.xml的<manifest>标签下(不要放在<application>标签内部)添加如下配置,声明你需要查询的第三方应用包名:
<queries> <!-- 要打开Chrome就声明Chrome的包名,后续要打开其他应用可以继续加<package>条目 --> <package android:name="com.android.chrome" /> </queries>
2. 优化跳转代码,增加非空校验
修改你的跳转逻辑,避免空指针异常,同时可以增加异常兜底处理:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_cctv); start = findViewById(R.id.button2); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = getPackageManager().getLaunchIntentForPackage("com.android.chrome"); if (intent != null) { startActivity(intent); } else { // 兜底逻辑:可以提示用户未安装目标应用,或者跳转到应用市场下载 Toast.makeText(CctvActivity.this, "未安装Chrome浏览器", Toast.LENGTH_SHORT).show(); } } }); }
内容的提问来源于stack exchange,提问作者Robert LiBert
相关产品推荐
相关产品推荐

