代码之家  ›  专栏  ›  技术社区  ›  achicn3

getPackageManager()始终返回空值

  •  -1
  • achicn3  · 技术社区  · 7 年前

    我尝试在我的应用程序中启动另一个应用程序

    我试过两种方法。

    方法1

        Intent intent = new Intent(Intent.ACTION_MAIN);
        ComponentName componentName = new ComponentName("com.b_app", "com.b_app.MainActivity");
        intent.setComponent(componentName);
        startActivity(intent);
    

    方法2

            Intent intent =  getPackageManager().getLaunchIntentForPackage("com.b_app");
            if (intent != null) {
                startActivity(intent);//null pointer check in case package name was not found
            }
            else Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
    

    方法1 给我错误:

    Unable to find explicit activity class {com.b_app/com.b_app.MainActivity}; have you declared this activity in your AndroidManifest.xml?
    

    方法2 toast显示错误(my else条件),这意味着getPackageManager()返回空。

    我在B_应用程序中的清单

       <activity android:name="com.b_app.MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    

    我很确定B_应用程序安装在我的智能手机上。

    我怎么解决?

    1 回复  |  直到 7 年前
        1
  •  1
  •   CommonsWare    7 年前

    toast显示错误(my else条件),这意味着getPackageManager()返回空值

    不,你会得到 NullPointerException 在这种情况下。就你而言, getLaunchIntentForPackage() 正在返回 null .

    再加上其他症状,说明您没有一个应用程序 applicationId com.b_app 安装在此设备上。