2011-11-01 186 views
0

我想組織我的應用程序到包,因爲它將有幾個全面的列表菜單。我試圖填充菜單的方式是通過查找每個包中的活動。NameNotFound異常時調用PackageManager.getPackageInfo

該問題可能是與清單:

<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方法調用全名如果我瞭解,那應該是正確的。

任何想法是什麼錯?

謝謝。

回答

2

getPackageInfo方法調用包的全名,如果我瞭解的話應該是正確的。

不會。您在混淆類的包和應用程序的包。提供給getPackageInfo()的值是應用程序包(即<manifest>元素中package屬性的值)。

+0

好的。我覺得是這樣的。謝謝。 –

+0

因此,如果我將包中的所有活動放到ActivityInfo []數組中,我應該只是解析數組以獲取我想要的信息,還是有更好的方法來分離視圖? –

+0

@ daedalus0x1a4:Android沒有真正的子包的概念,所以你只需要迭代結果並過濾掉你想要的結果。 – CommonsWare