Исключение NameNotFound при вызове PackageManager.getPackageInfo

#android

#Android

Вопрос:

Я пытаюсь организовать свое приложение в пакеты, потому что в нем будет несколько полных меню со списком. Я пытаюсь заполнить меню, находя действия в каждом пакете.

Проблема может быть в манифесте:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="machinists.toolkit"
android:versionCode="1"
android:versionName="1.0" android:installLocation="auto">

<uses-sdk android:minSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" android:debuggable="true">
    <activity
        android:label="@string/app_name" 
        android:name=".MTEActivity" 
        android:theme="@android:style/Theme.NoTitleBar">
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".ExceptionActivity"></activity>
    <activity android:name=".activities.ReferenceActivity"></activity>
    <activity android:name=".activities.CalculatorActivity"></activity>
    <activity android:name=".activities.reference.FormulasActivity"></activity>
    <activity android:name=".activities.reference.MaterialsActivity"></activity>
</application>
 

и рассматриваемый фрагмент является:

 try {
        this.activities = this.packageManager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES).activities;
    } catch (NameNotFoundException e) {...
 

В этом случае this.packageName преобразуется в machinist.toolkit.activities.reference

Метод getPackageInfo вызывает полное имя пакета, и это должно быть правильным, если я правильно понимаю.

Есть идеи, что не так?

Спасибо.

Ответ №1:

Метод getPackageInfo вызывает полное имя пакета, и это должно быть правильным, если я правильно понимаю.

Нет. Вы путаете пакет класса и пакет приложения. Переданное значение getPackageInfo() является пакетом приложения (т.Е. Значением вашего package атрибута в <manifest> элементе).

Комментарии:

1. Хорошо. Я подумал, что это что-то вроде этого. Спасибо.

2. Итак, если я извлеку все действия из пакета в массив ActivityInfo[], должен ли я просто проанализировать массив для получения нужной мне информации или есть лучший способ разделить представления?

3. @daedalus0x1a4: Android не имеет реального представления о подпакетах, поэтому вам просто нужно будет перебирать результаты и отфильтровывать те, которые вы хотите.