2017-06-12 34 views
0

宣佈我的清單文件我有以下幾點:android.content.ActivityNotFoundException但在清單

<activity 
      android:name="org.sipdroid.codecs.Codecs$CodecSettings" 
      android:label="@string/app_name" > 
</activity> 

這是類:

public static class CodecSettings extends PreferenceActivity { 

    private static final int MENU_UP = 0; 
    private static final int MENU_DOWN = 1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.xml.codec_settings); 

     // for long-press gesture on a profile preference 
     registerForContextMenu(getListView()); 

     addPreferences(getPreferenceScreen()); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
        ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 

     menu.setHeaderTitle(R.string.codecs_move); 
     menu.add(Menu.NONE, MENU_UP, 0, 
      R.string.codecs_move_up); 
     menu.add(Menu.NONE, MENU_DOWN, 0, 
      R.string.codecs_move_down); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

     int posn = (int)((AdapterContextMenuInfo)item.getMenuInfo()).position; 
     Codec c = codecs.elementAt(posn); 
     if (item.getItemId() == MENU_UP) { 
      if (posn == 0) 
       return super.onContextItemSelected(item); 
      Codec tmp = codecs.elementAt(posn - 1); 
      codecs.set(posn - 1, c); 
      codecs.set(posn, tmp); 
     } else if (item.getItemId() == MENU_DOWN) { 
      if (posn == codecs.size() - 1) 
       return super.onContextItemSelected(item); 
      Codec tmp = codecs.elementAt(posn + 1); 
      codecs.set(posn + 1, c); 
      codecs.set(posn, tmp); 
     } 
     PreferenceScreen ps = getPreferenceScreen(); 
     SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext); 
     String v = ""; 
     SharedPreferences.Editor e = sp.edit(); 

     for (Codec d : codecs) 
      v = v + d.number() + " "; 
     e.putString(Settings.PREF_CODECS, v); 
     e.commit(); 
     ps.removeAll(); 
     addPreferences(ps); 
     return super.onContextItemSelected(item); 
    } 

    @Override 
    public boolean onPreferenceTreeClick(PreferenceScreen ps, Preference p) { 
     ListPreference l = (ListPreference) p; 
     for (Codec c : codecs) 
      if (c.key().equals(l.getKey())) { 
       c.init(); 
       if (!c.isLoaded()) { 
        l.setValue("never"); 
        c.fail(); 
        l.setEnabled(false); 
        l.setSummary(l.getEntry()); 
        if (l.getDialog() != null) 
         l.getDialog().dismiss(); 
       } 
      } 
     return super.onPreferenceTreeClick(ps,p); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     unregisterForContextMenu(getListView()); 
    } 
} 

我越來越: 無法找到顯式活動類{org.sipdroid.sipua/org.sipdroid.codecs.Codecs $ CodecSettings};你有沒有在你的AndroidManifest.xml中聲明這個活動?

怎麼了?

+0

檢查您的「CodecSettings」活動頂部的軟件包名稱,是否與該活動名稱的清單中的條目匹配! – shadygoneinsane

+0

in manifest:package =「org.sipdroid.sipua」 in codecs:package org.sipdroid.codecs; –

+0

在您的'CodecSettings'活動的頂部發布軟件包名稱以及您的應用的gradle'applicationId' – shadygoneinsane

回答

-1

活動不應該是一個靜態類。

活動不應該是一個內部類。

說到你的問題,它表明你聲明瞭包名兩次。

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.yourpackage.activities"> 

    <application 
     android:theme="@style/AppTheme"> 

     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

如果您在<manifest ../>聲明的包的名字,你不需要在<activity android:name=".MainActivity">再次聲明。只需使用「。」而不是那個。

+0

將'Activity'聲明爲靜態內部類沒有任何問題。如果它是一個內部類,那麼**必須聲明爲'static',否則Android框架將不能實例化。** –

+0

此外,''標記中的程序包名稱與Java程序包名稱無關在源代碼中使用。這些**可能是相同的,但不要求它們是相同的。**在這種情況下,OP已在清單中正確指定了他的「Activity」的名稱。 –

相關問題