Android: не удается найти явный класс activity … startActivity из PreferenceActivity

#java #android #android-activity #preferenceactivity

#java #Android #android-активность #preferenceactivity

Вопрос:

Я пытаюсь запустить новое действие из PreferenceActivity. Однако он завершается с ошибкой «Невозможно найти явный класс activity. Вы объявили это действие в своем AndroidManifest.xml ?»

Ну, да, я объявил это:

 <application [......] android:debuggable="true">
    <activity android:name=".AlarmSettings"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".FlashLightActivity"></activity>

    <receiver
        android:name="AlarmReceiver"
        android:process=":remote" >
    </receiver>
</application>
 

AlarmSettings — это моя PreferenceActivity. AlarmSettings вызывает FlashLightActivity таким образом:

 Intent i = new Intent(AlarmSettings.this, FlashLightActivity.class);
startActivity(i);
 

И это FlashLightActivity:

 public class FlashLightActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.flashlight);
   }    
}
 

… Я не знаю, что делать. Есть идеи?

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

1. Попробуйте Project->Clean в Eclipse и запустите повторно.

2. Это странно. Попробуйте удалить начальную точку из .FlashLightActivity и протестировать с помощью простого FlashLightActivity имени или попробуйте указать полное имя пакета вашей активности, например com.example.FlashLightActivity .

3. Он завершается точно так же: S

4. Черт! Находится ли класс FlashLightActivity в том же пакете? Вы наверняка знаете developer.android.com/guide/topics/manifest /… но в остальном это может помочь… Пробовал полное имя с обеих сторон (AndroidManifest и startActivity)?

5. Перепробовал все комбинации… это не работает. Да, полное имя то же самое. Итак, если код в порядке… Я могу думать только о какой-то странной проблеме Eclipse

Ответ №1:

У меня тоже была эта проблема. Если вы внимательно прочитаете ошибку в logcat, вы будете знать, что делать.

Вы должны объявить activity в AndroidManifest.xml

     <activity
        android:name=".TheNameOfMyActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
 

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

1. если вы внимательно прочитали вопрос, он уже объявил его в манифесте!

Ответ №2:

Для меня эта ошибка произошла из-за того, что я переместил свой файл класса activity в другой пакет, и по какой-то причине Eclipse неправильно его реорганизовал. Всегда используйте полное имя для своего действия и дважды проверяйте его точность.

Ответ №3:

При запуске действия изнутри другого вам необходимо предоставить вашему файлу AndroidManifest родительско-дочернее отношение, чтобы гарантировать, что запущенное действие вернет вам свой результат, требуется родительское действие. пример,

 <activity
            android:name="ACTIVITY TO BE STARTED"
            android:label="@string/TITLE"
            android:screenOrientation="landscape" >
             <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="ACTIVITY STARTED FROM?RETURNING TO" />
        </activity>
 

Ответ №4:

Копирование решения poster в раздел ответов, чтобы удалить его из фильтра «Без ответа»:

Это была проблема не с моим кодом, а с Eclipse и Android SDK. После некоторых исследований я выполнил «Справка -> Проверить наличие обновлений» в Eclipse, и теперь все работает.

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

1. У меня тоже была эта проблема. Все было в порядке, пока я не переключился на пакет Android ADT Bundle (Eclipse Android SDK) из developer.android.com :(. Но ваш способ не сработал для меня:(

2. Кажется, у меня такая же проблема. Мой код, похоже, проверяется, к сожалению, у меня есть пакет Android ADT, и он не работает для меня. Есть идеи?

Ответ №5:

У меня была та же проблема, я написал объявление намерения внутри onCreate функции сервиса или макета. на самом деле это то, что говорит «не удалось получить доступ к Explicity»

Ответ №6:

В моем случае мне просто пришлось переименовать класс, потому что это было слово, зарезервированное из android studio или имеющее другую ссылку, поэтому:

  • Можно найти это с crl помощью space и проверить маршрут вашего предложения
  • Проверьте импорт в классе и удалите ненужные
  • Не используйте имена по умолчанию

Так что не используйте FlashLightActivity , например.

Может быть, его работа для других