2017-06-12 8 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

:package = "org.sipdroid.sipua" コーデックで:package org.sipdroid.codecs; –

+0

あなたのアプリケーションのグラデル 'applicationId'と一緒に' CodecSettings'アクティビティの上部にパッケージ名を投稿してください。 – shadygoneinsane

答えて

-1

アクティビティは静的クラスであってはなりません。

アクティビティは内部クラスであってはなりません。

問題が発生した場合は、パッケージ名を2回宣言しています。あなたは<manifest ../>にパッケージ名を宣言した場合

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

、あなたは<activity android:name=".MainActivity">で再びそれを宣言する必要はありません。単に "。"を使用してください。それの代わりに。

+0

'Activity'を' static'内部クラスとして宣言することには何も問題ありません。 ** –

+0

また、 ''タグのパッケージ名は、Javaパッケージ名とは関係がありません。また、内部クラスの場合は、静的宣言する必要があります。そうでなければ、Androidフレームワークはインスタンス化できません。ソースコードで使用されます。これらの**は同じでも構いませんが、同じである必要はありません。**この場合、OPはマニフェストに正しく「アクティビティ」の名前を指定しました。 –

関連する問題