2010-05-27 8 views
5

Estoy jugando con algún código. Creo una actividad y simplemente hacer algo como esto:Android OS 2.2 Permisos: No tengo absolutamente ninguna idea de por qué esta simple pieza de código no funciona. ¿Qué estoy haciendo mal?

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

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

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

Sí, en mi AndroidManifest.xml, he añadido:

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

Nada cambia. El SystemClock nunca se reinicia ... simplemente sigue funcionando. El error que estoy recibiendo solo dice que el permiso "SET_TIME" no se otorgó al programa. Nivel de protección 3.

Los permisos están ahí ... y en la API para 2.2 dice que esta característica es compatible ahora. No tengo idea de lo que estoy haciendo mal.

If android.content.Intent; entra en juego, por favor explica. ¡Realmente no entiendo cuál es la idea detrás de los intentos!

¡Gracias por cualquier ayuda!

+0

¿Logcat indica algo? –

Respuesta

12

Hay un permiso SET_TIME_ZONE pero no hay permiso SET_TIME. Las aplicaciones no pueden cambiar el reloj del sistema de forma programática.

actualización

SET_TIME está disponible desde 2.2, pero sólo se puede conceder al proceso de sistema o aplicaciones firmado con la firma del sistema.

+0

Según http://developer.android.com/reference/android/Manifest.permission.html#SET_TIME, está disponible desde API 8. ¿Cuál es el problema? – JRL

+0

De hecho, está en los 2.2 documentos, me acabo de dar cuenta de que estaba verificando el código fuente 2.0 en lugar de 2.2. Perdón por la confusión. Comprobé el código fuente 2.2 y el permiso SET_TIME solo se puede otorgar a las aplicaciones firmadas con la firma del sistema. Esto significa que no puedes usar este permiso. –

+0

gracias por la aclaración. ¿El nivel de protección para un permiso dado está documentado en algún lugar o es necesario mirar AndroidManifest.xml en la fuente? – JRL

-3

insetada de System.out.println() utiliza Log.v() o similar.

Creo que he encontrado el error, por favor probarlo: Retire </uses-permission> en ambas líneas, que debería funcionar

+0

Log. *() Es mejor, pero System.out.println() funciona. es lo mismo que . Esta última es solo una versión corta de la primera. –

+0

Como dijo @Romain, es realmente una mano corta de que está vacía. –

2

usando AlarmManager con el permiso SET_TIME para establecer la hora del sistema parece funcionar :)

+0

Me salvaste un gran dolor de cabeza. Gracias ! –

+2

¿En qué nivel de API ha probado esto? Siempre obtengo una excepción que dice: "java.lang.SecurityException: setTime: Ni el usuario 10041 ni el proceso actual tiene android.permission.SET_TIME." Configuré el permiso: "android. permission.SET_TIME "en mi Manifiesto.¿Alguien puede confirmar eso? – Hemeroc

+0

@Hemeroc Mismo aquí. Probado en API nivel 8. Parece que la aplicación debe estar firmada con el certificado del sistema. –

Cuestiones relacionadas