Android:使用变量调用getLaunchIntentForPackage()时PackageManager空指针异常
问题分析与解决方案
核心问题
你在ReceiveActivity里只声明了private PackageManager packageManager;,但完全没初始化这个对象,导致调用getApplicationIcon()时触发空指针异常——这就是日志里提示的"Attempt to invoke virtual method... on a null object reference"的原因。
修复步骤
1. 初始化PackageManager
在ReceiveActivity的onCreate方法里,setContentView之后添加一行初始化代码:
packageManager = getPackageManager();
2. 额外优化(避免后续崩溃)
- 处理默认包名:原代码里默认值是"default value",这不是合法包名,需要改成空字符串并添加判断
- 处理空启动Intent:
getLaunchIntentForPackage()可能返回null,必须判断后再启动 - 异常友好处理:不要直接抛RuntimeException,换成设置默认图标等逻辑
修改后的完整ReceiveActivity代码
public class ReceiveActivity extends AppCompatActivity { private ImageButton appDisplay; private Drawable icon; private PackageManager packageManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_receive); // 关键:初始化PackageManager packageManager = getPackageManager(); SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); // 默认值改成空字符串,方便判断 String packageNameReceive = sharedPreferences.getString("fabKey", ""); appDisplay = findViewById(R.id.appDisplay); // 只有包名合法时才设置图标和点击事件 if (!packageNameReceive.isEmpty()) { try { icon = packageManager.getApplicationIcon(packageNameReceive); appDisplay.setBackground(icon); } catch (PackageManager.NameNotFoundException e) { // 包名无效时显示默认图标 appDisplay.setBackgroundResource(R.drawable.ic_default_app_icon); e.printStackTrace(); } appDisplay.setOnClickListener(v -> { Intent appLaunch = packageManager.getLaunchIntentForPackage(packageNameReceive); // 检查Intent是否为空,防止崩溃 if (appLaunch != null) { startActivity(appLaunch); } }); } else { // 未选中应用时的提示 appDisplay.setBackgroundResource(R.drawable.ic_no_app_selected); } } }
适配Android 11+的额外配置
如果你的应用目标是Android 11及以上版本,需要在AndroidManifest.xml里添加应用查询权限,否则可能获取不到第三方应用信息:
<queries> <intent> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent> </queries>
内容的提问来源于stack exchange,提问作者Max Devtec
相关产品推荐
相关产品推荐

