2017-06-12 1 views
0

Je le suivais dans mon fichier manifeste:android.content.ActivityNotFoundException mais a déclaré dans Manifest

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

Et c'est la classe:

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()); 
    } 
} 

Je reçois: Impossible de trouver classe d'activité explicite {org.sipdroid.sipua/org.sipdroid.codecs.Codecs $ CodecSettings}; avez-vous déclaré cette activité dans votre AndroidManifest.xml?

Qu'est-ce qui ne va pas?

+0

Vérifiez le nom du paquet en haut de votre activité 'CodecSettings', s'il correspond à l'entrée dans le manifeste pour le nom de cette activité ou pas !! – shadygoneinsane

+0

dans manifest: package = "org.sipdroid.sipua" dans les codecs: package org.sipdroid.codecs; –

+0

publiez le nom du paquet en haut de votre activité 'CodecSettings' ici avec le graduel' applicationId' pour votre application – shadygoneinsane

Répondre

-1

L'activité ne doit pas être une classe statique.

L'activité ne doit pas être une classe interne.

En ce qui concerne votre problème, cela montre que vous avez déclaré deux fois le nom du paquet.

<?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> 

Si vous déclarez le nom du package dans <manifest ../>, vous n'avez pas besoin déclarer à nouveau dans <activity android:name=".MainActivity">. Utilisez simplement "." au lieu de.

+0

Il n'y a rien de mal à déclarer une classe interne 'Activity' en tant que classe interne' static'. S'il s'agit d'une classe interne, ** elle doit être déclarée "static" sinon le framework Android ne pourra pas l'instancier. ** –

+0

De plus, le nom du paquet dans la balise '' n'a rien à voir avec le nom du paquet Java utilisé dans le code source. Ces ** peuvent être identiques, mais il n'est pas nécessaire qu'ils soient identiques. ** Dans ce cas, OP a spécifié correctement le nom de son 'Activity' dans le manifeste. –