Разрешения Android OS 2.2: я совершенно не понимаю, почему этот простой фрагмент кода не работает. Что я делаю неправильно?

Я просто играю с кодом. Я создаю Activity и просто делаю что-то вроде этого:

long lo = currentTimeMillis();
System.out.println(lo);

lo *= 3;
System.out.println(lo);

SystemClock.setCurrentTimeMillis(lo);
System.out.println( currentTimeMillis() );

Да, в моем AndroidManifest.xml я добавил:

<uses-permission android:name="android.permission.SET_TIME"></uses-permission>
<uses-permission android:name="android.permission.SET_TIME_ZONE"></uses-permission>

Ничего не меняется. Системные часы никогда не сбрасываются... они просто продолжают тикать. Ошибка, которую я получаю, просто говорит о том, что программе не было предоставлено разрешение «SET_TIME». Уровень защиты 3.

Разрешения есть... и в API для 2.2 написано, что эта фича теперь поддерживается. Я понятия не имею, что я делаю неправильно.

Если android.content.Intent; вступает в игру, пожалуйста, объясните. Я действительно не понимаю, в чем идея намерений!

Спасибо за любую помощь!


person K-RAN    schedule 27.05.2010    source источник
comment
Указывает ли logcat что-нибудь?   -  person Yann Ramin    schedule 27.05.2010


Ответы (3)


Есть разрешение SET_TIME_ZONE, но нет разрешения SET_TIME. Приложения не могут программно изменять системные часы.

Обновить

SET_TIME доступно с версии 2.2, но может быть предоставлено только системному процессу или приложениям, подписанным системной подписью.

person Romain Guy    schedule 27.05.2010
comment
Согласно developer.android.com/reference/android/ , он доступен с API 8. В чем дело? - person JRL; 27.05.2010
comment
Действительно, это в документах 2.2, я только что понял, что проверял исходный код 2.0 вместо 2.2. Извините за путаницу. Я проверил исходный код 2.2, и разрешение SET_TIME может быть предоставлено только приложениям, подписанным системной подписью. Это означает, что вы не можете использовать это разрешение. - person Romain Guy; 27.05.2010
comment
Спасибо за разъяснения. Задокументирован ли где-нибудь уровень защиты для данного разрешения или требуется смотреть AndroidManifest.xml в исходном коде? - person JRL; 27.05.2010
comment
Можно ли написать приложение пользовательского уровня с системной подписью?? Если нет, то меня немного раздражает, почему разработчики Android выпустили это :( - person K-RAN; 27.05.2010
comment
Нет, вы не можете использовать системную подпись. Разве что получить от производителя. - person Romain Guy; 28.05.2010

использование AlarmManager с разрешением SET_TIME для установки системного времени работает :)

person user718146    schedule 16.05.2011
comment
Вы только что избавили меня от огромной головной боли. Спасибо! - person Jason Nichols; 15.09.2011
comment
На каком уровне API вы это тестировали? Я всегда получаю сообщение об исключении: java.lang.SecurityException: setTime: ни пользователь 10041, ни текущий процесс не имеют android.permission.SET_TIME. Я установил разрешение: android.permission.SET_TIME в своем манифесте. Кто-нибудь может это подтвердить? - person Hemeroc; 13.12.2011
comment
@Hemeroc То же самое здесь. Протестировано на уровне API 8. Похоже, приложение должно быть подписано системным сертификатом. - person Dheeraj Vepakomma; 15.12.2011

вставка System.out.println() использует Log.v() или аналогичный.

Я думаю, что нашел вашу ошибку, попробуйте: удалите </uses-permission> в обеих строках, это должно сработать.

person poeschlorn    schedule 27.05.2010
comment
Log.*() лучше, но System.out.println() работает. ‹uses-permission›‹/uses-permission› совпадает с ‹uses-permission/›. Последнее является лишь укороченной версией первого. - person Romain Guy; 27.05.2010
comment
Как сказал @Romain, ‹tag /› на самом деле является короткой рукой ‹tag›‹/tag›, которая пуста. - person Dave G; 28.05.2010