На основе Ответ Wes Я создал обновленный скрипт. Обновления получили слишком много, чтобы добавить комментарии.
Моя версия ниже .
Использование @REM: @REM: getfiledatestr file-path envvar Результат @REM, возвращаемый в% envvar%: getfiledatestr для %% A в (% 1) do (установить getfilefolderstr = %% ~ dpA set getfilenamestr = %% ~ nxA) @REM Удаление конечной обратной косой черты, если% getfilefolderstr: ~ -1% == \ set getfilefolderstr =% getfilefolderstr: ~ 0, -1% @REM очистить его для случая, когда команда forfiles не работает set getfiledatestr = for / f "delims =" %% i in ('"forfiles / p" "% getfilefolderstr%" "/ m" "% getfilenamestr%" "/ c" cmd / c echo @fdate @ftime ""') do set getfiledatestr = %% i @REM старый код: для %% f in (% 1) установить set getfiledatestr = %% ~ tf установить% 2 = @REM считать отсутствующие файлы как самые старые файлы, если «% getfiledatestr%» equ «" set% 2 = "" @REM В настоящее время поддерживаемые разделители разделов даты: / :. и пространство. Возможно, вам придется добавить дополнительные разделители в следующую строку, если ваш формат даты также содержит альтернативные разделители. Если вы этого не сделаете, то разобранные даты будут полностью произвольно структурированы, а сравнения - неправильными. for / f "tokens = 1,2,3,4,5,6 delims = / :." %% a in ("% getfiledatestr%") do (@REM для MM / DD / YYYY HH: MM: SS AMPM использовать вызов: appendpadded% 2 %% c %% b %% a %% g %% d %% e %% f @REM для DD / MM / YYYY HH: MM: SS AMPM использовать вызов: appendpadded% 2 %% c %% b %% a %% g %% d %% e %% f @REM для YYYY / DD / MM HH: MM: SS AMPM использовать вызов: appendpadded% 2 %% a %% b %% c %% g %% d %% e %% f call: appendpadded% 2 %% c %% b %% a %% g %% d %% e %% f) @goto: eof @REM Принимает env var в качестве первого параметра @REM и значения, которые будут добавлены в качестве остальных параметров, @REM правое заполнение всех значений с ведущими 0 до 4 мест: appendpadded set temp_value = 000% 2 call: expand set% 1 = %%% 1 %%%% temp_value: ~ -4 %% shift / 2, если «% 2» neq »« goto appendpadded set temp_value = @REM cmd не может сравнивать целые числа, превышающие 1 + 31 бит, поэтому вместо этого преобразуйте их в цитированные числовые строки. Текущая реализация генерирует числовые строки намного дольше, чем 31-битные целые числа. call: expand set% 1 = "%%% 1 %%%" @goto: eof @REM заставляет все переменные полностью развернуться: expand% * @goto: eof
Возможно, вам нужно проверить, что вы добавили новую активность в файл manifest.xml
Пример:
<activity
android:name=".className"
android:label="@string/app_name" >
</activity>
Мое решение этой ошибки состояло в том, чтобы добавить имя пакета перед именем в манифесте.
У меня были следующие действия:
Мой манифест содержал следующее:
<activity android:name=".A1" ....></activity>
<activity android:name=".A2" ....></activity>
Это решило проблему:
<activity android:name=".A1" ....></activity>
<activity android:name="gallery.A2" ....></activity>
Это работает, если у вас есть объект Activity (который нужно запустить):
intent.setClassName(CallingActivity.this, activityToLaunch.getComponentName().getClassName());
У меня было ActivityNotFoundException, когда я реализовал Activity внутри другого класса (как внутренний класс):
//... inside the utility class Pref
public static class Activity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
//...
Объявлено как следующее внутри манифеста:
<activity android:name=".Pref.Activity"
...
Объявив это как обычный класс (public class PrefActicity) и соответствующим образом изменяя манифест, он работал как обычно.
Эй, вам нужно использовать другую конструкцию Intent. Это наверняка решит вашу проблему в течение секунды:
Пример:
Intent inte=new Intent(getBaseContext(),"your class name with .class extension ");
startActivity(inte);
Это работает отлично, и я проверил этот код, работая правильно.
Действия, которые вы вызываете, не содержат «sheme» и содержат фильтр намерений:
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.sj.myapplication.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
, поэтому при вызове кода:
Intent intent=new Intent("com.example.sj.myapplication.SecondActivity");
startActivity(intent);
Активность, которую вы вызываете, должна отображаться не только в манифесте для собственного пакета, но и в манифесте для пакета CALLING.
<activity>
из манифеста в проект библиотеки в манифест моего проекта?
– Solace
22 August 2015 в 06:50
Посмотрите на документацию здесь , что вы хотите:
intent.setClassName("com.x.y", "className");
Это исключение также возникает, если вы включаете библиотеку в свое приложение и если библиотека вызывает действие, определенное в проекте библиотеки. В этом случае нам нужно объединить манифест библиотеки с манифестами вызывающего приложения.
С помощью ADT версии 20 мы можем сделать это, добавив инструкцию ниже в project.properties вызывающего приложения.
manifestmerger.enabled = true
Я использовал getActivityContext()
(вместо Activity.this
) для кода меню, чтобы сохранить какую-то работу, и копировать и вставлять его в каждое действие без редактирования каждый раз.
Я заменил их с Activity.this
, и проблема исчезла.
У меня такое чувство, что умный парень Android может работать, не имея необходимости делать это. Хотелось бы услышать, что это будет.
Да, у меня тоже есть эта проблема. Я обновил проект. И тогда все работает нормально.
intent.setClass принимает параметры как «Контекст пакета» и «Класс». примером может быть:
intent.setClass(CurrentActivity.this, TargetActivity.class);
также вам нужно проверить, зарегистрирована ли активность в файле манифеста.
У меня тоже такой же случай. Прочитав ответ Пирсона, я пересмотрел свою деятельность и выяснил, что написал
public void onCreate(Bundle s)
. Но на самом деле это должно быть
protected void onCreate(Bundle s)
И теперь это работает!
Добавлено новое действие и определило его в manifest.xml, но я все еще получал ошибку «Невозможно найти явный класс активности». Я использую Eclipse. Решение моей проблемы - это «очистка» проекта. Из главного меню в Eclipse: Project | Clean ... Затем вы выбираете свой проект и очищаете его.
Попробуйте использовать следующее:
intent.setClassName("com.x.y", "com.x.y.className");
Это работает для меня
Удалите свою активность из манифеста, а затем добавьте ее снова. Этот тип не записывает напрямую XML. Вместо этого перейдите к Application > Application nodes > add
, выберите «Активность» и затем найдите источник файла.
Это сработало для меня.
вы можете добавить этот код в файл manifiest.xml
action android:name="com.kaushalam.activity101activity.SecondActivity"
category android:name="android.intent.category.DEFAULT"
Перезапустите Eclipse и снова проверьте свой манифест. Если вам не хватает соответствующего действия, добавьте его и повторите попытку. Он решил мою аналогичную проблему.
Если другие люди сталкиваются с чем-то похожим и приходят на этот пост, проблема, которую я могу, может сэкономить вам некоторое время. Может быть, не связано с проблемой OP, но def связано с исключением ActivityNotFound.
Я пытался загрузить активность с помощью:
Intent intent = new Intent( this, class );
Однако я постоянно продолжал получать ActivityNotFoundException
, хотя я проверял и повторно проверял код несколько раз.
Это исключение, которое я получал, на самом деле не было вызвано намерением, но какой-то код, который я запускал внутри загруженной активности, бросая RuntimeException
, (моя проблема была вызвана Typeface.createFromAsset()
)
Возможно, что вы работаете с аналогичным RuntimeException в своей деятельности.
Чтобы убедиться, что это так, введите код своей цели в блоках try catch. Например:
try {
/* your code */
...
} catch ( ActivityNotFoundException e) {
e.printStackTrace();
}
Запустите приложение снова и проверьте свой LogCat, если это та же проблема, вы получите исключение RuntimeException с записью «Caused By:», указывающей на вашу актуальную проблему.
Я потратил хороший час, пытаясь понять это. Надеюсь, это может сэкономить некоторое время.
, когда у меня такая же проблема. если вы используете файлы классов библиотеки и записываете его в файлы манифеста android, напишите его так же, как и затем удалите файлы манифеста проектов библиотеки этой части >> тогда он будет работать абсолютно.
Проверьте содержимое файла манифеста Android в папке bin проекта. Когда ваше приложение скомпилировано и упаковано, файл манифеста копируется в папку bin. В моем случае манифест в папке bin не согласуется с оригинальным манифестом. Вероятно, это ошибка Eclipse. Я вручную скопировал манифест в папку bin, и он сработал.
В дополнение к ответу Мины. Когда вы объявляете активность как внутренний статический класс, тогда вы должны написать свою активность в манифест, как ...
<activity android:name=".app.FragmentLayoutSupport$DetailsActivity" />
здесь .app происходит от вашего имени пакета, это может быть .helpers.afdfa $ afda
У меня была такая же проблема. Я пробовал все, кроме ошибки, которую я выяснил позже, было то, что между двойными кавычками и моим именем класса было пространство. Это должно быть: intent.setClassName("com.x.y","com.x.y.className")
not
intent.setClassName("com.x.y"," com.x.y.className")
.ActivityClassName
работает в автономном режиме, но не при вызове из другого приложения через Intent. +1 за подтверждение того, что я не галлюцинирую. – Bill The Ape 16 February 2012 в 06:01