2011-09-27 11 views
8

acabo de descubrir esta aplicación: https://market.android.com/details?id=de.j4velin.lockscreenCalendar¿Cómo puedo interactuar con el diseño Lockscreen para mostrar texto en él, al igual que esta aplicación:

parece que ahora es posible escribir un texto dentro de la pantalla de bloqueo en el lugar donde el la alarma generalmente se escribe.

Me gustaría mostrar texto personalizado en este lugar, pero no tengo ni idea de cómo lograrlo.

Este tipo tenga éxito para escribir los eventos del calendario en este lugar.

Muchas gracias por cualquier indicio // fragmento que me ayudaría.

enter image description here

Respuesta

9

Esto es asombrosamente fácil de lograr y sorprendentemente mal documentado. Todo lo que necesita hacer es configurar la cadena de alarma en la configuración del sistema, de la siguiente manera:

String message = "This is a test"; 
    Settings.System.putString(context.getContentResolver(), 
      Settings.System.NEXT_ALARM_FORMATTED, message); 
+1

Ok, así que sólo puedo personalizar el texto, pero no el tamaño de fuente, etc ... Gracias mucho por esta gran respuesta, corta y eficiente! –

+2

¿Dónde debería poner este código? – smoqadam

+0

Esto funciona solo para API 20 y siguientes. – WM1

1

nunca he otro lado de ninguna manera legítima dentro de las API públicas android para afectar a la pantalla de bloqueo. Sin jugar con esa aplicación en absoluto, no lo sabría con certeza, pero creo que creó esa actividad que le permite mostrar cualquier texto que quiera. Luego usa un receptor para escuchar los eventos SCREEN_OFF o SCREEN_ON y comienza su actividad de "bloqueo" en ese momento.

Vale la pena señalar: Si decide hacer algo como esto para lograr el efecto que busca, no se comportará exactamente igual que la pantalla de bloqueo. Las diferencias pueden ser bastante leves y podrían terminar bien para tus propósitos, pero ten en cuenta que están ahí. También suponiendo que va por esta ruta, no funcionaría si el usuario tiene un bloqueo de "patrón" ya que KeyguardManager no puede desactivar esa pantalla mediante programación

1

también necesita añadir

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

en AndroidManifest.xml

+0
0

La respuesta votado funcionará solo si nadie más está usando lo mismo para mostrar su mensaje. Si se registran dos receptores para la acción de intento SCREEN_ON/OFF, se mostrará el último mensaje del receptor.

0

Con la solución marc1s hay 2 problemas, 1. No se ve bien & no puede cambiar su aspecto relleno & por ejemplo, fuente o color de texto, etc. 2. cualquier otra aplicación puede reemplazarlo

Por lo tanto, es mejor si muestra una vista usando el administrador de ventanas de un servicio. Para que pueda mostrar cualquier vista que desee mostrar.

p. Ej. mi código de abajo en onStartCommand de mi servicio

WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

View mView = mInflater.inflate(R.layout.score, null); 

    WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0, 
      WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
      /* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */, 
      PixelFormat.RGBA_8888); 

mWindowManager.addView(mView, mLayoutParams); 
+0

Estoy tratando de usar este código en mi clase de receptor de eventos (BroadcastReceiver extiende BroadcastReceiver) ¿Qué debería estar usando para mInflater pls? – pili

+0

LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService (Context.LAYOUT_INFLATER_SERVICE); Y en el método onReceive() obtienes el segundo parámetro de tipo contexto, asígnalo a mContext –

Cuestiones relacionadas