Procese el comando sin iniciar MainActivity, en Android
Soy nuevo a android y pegado en un punto con mi nueva pantalla de la aplicación de prueba. Estoy tratando de desarrollar una aplicación de Android para desactivar o bloquear la pantalla directamente haciendo clic en el icono del lanzador de aplicaciones de la aplicación.
Puedo bloquear la pantalla con la funcionalidad que quiero pero con un problema. Mientras hago clic en el icono de bloqueo de pantalla en el lanzador se tarda alrededor de un segundo y, a continuación, bloquea la pantalla (el tiempo es llevado por MainActivity para lanzar).
- Camino a capturas de pantalla en Android
- ¿Cómo puedo obtener el ancho y la altura de la pantalla del sistema Android Honeycomb?
- Descripción de la densidad de la pantalla Samsung Galaxy Tab
- Android cómo obtener la preferencia Pantalla de un checkBoxPreference
- Tamaño de pantalla en Samsung Tablet 10.1
Quiero que el tiempo de espera para ser eliminado y sólo quería procesar el comando para bloquear el teléfono cuando el usuario toque en el icono de la aplicación en el lanzador. Pero no soy capaz de entenderlo.
Aquí está AndroidManifest.xml
<application android:theme="@android:style/Theme.NoDisplay" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:allowBackup="true"> <activity android:name=".MainActivity" android:excludeFromRecents="true" android:launchMode="singleTask"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="ScreenOffAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/permissions" /> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> </application>
MainActivity.java
public class MainActivity extends Activity { protected void onCreate(Bundle bundle) { super.onCreate(bundle); DevicePolicyManager deviceManger = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName compName = new ComponentName(this, ScreenOffAdminReceiver.class); if (deviceManger.isAdminActive(compName)) { deviceManger.lockNow(); finish(); } else { Intent intent = new Intent("android.app.action.ADD_DEVICE_ADMIN"); intent.putExtra("android.app.extra.DEVICE_ADMIN", compName); intent.putExtra("android.app.extra.ADD_EXPLANATION", getString(R.string.devicePolicyManagerMsg)); startActivityForResult(intent, 0); } Process.killProcess(Process.myPid()); } }
ScreenOffAdminReceiver.java
public class ScreenOffAdminReceiver extends DeviceAdminReceiver { public void onDisabled(Context context, Intent intent) { Toast.makeText(context, R.string.deviceAdminDisabled, Toast.LENGTH_SHORT).show(); } public void onEnabled(Context context, Intent intent) { Toast.makeText(context, R.string.deviceAdminEnabled, Toast.LENGTH_SHORT).show(); } }
permissions.xml
<?xml version="1.0" encoding="utf-8"?> <device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> <force-lock /> </uses-policies> </device-admin>
Sólo quiero eliminar el DELAY mientras bloqueo la pantalla. Cualquier ayuda será muy apreciada. Gracias
- Que es mejor añadir bandera o conjunto de bandera ver pantalla completa y pantalla en
- ¿Cómo atenuar / desenfoque sólo parte de la pantalla?
- Cómo evitar la captura de pantalla en Android
- Disposición de la pantalla de preferencias de Android
- SpinnerPreference? (Cómo incrustar un Spinner en una pantalla de Preferencias)
- ¿Cómo distinguir el estado de encendido / apagado de la pantalla durante la llamada entrante?
- Android: Desactivar la pantalla de un servicio
- Android y el soporte de múltiples diseños de pantallas
Creo que deberías usar la clase de aplicación
public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); /* you should code here */ } }
Puede intentar disminuir el tiempo de inicio de la aplicación (crear actividad) con la configuración del tema de cambio:
Intente usarlo en su estilo de aplicación:
<item name="android:windowDisablePreview">true</item> <item name="android:windowContentOverlay">@null</item>
No creo que pueda alcanzar un tiempo de respuesta casi cero mientras su "disparador" esté haciendo clic en el icono del lanzador de aplicaciones por dos razones:
-
Cuando haces clic en el ícono de la aplicación, se envía una solicitud al "sistema" (si quieres leer más sobre él, se llama proceso zygote). A continuación, el sistema crea el proceso para que se ejecute la aplicación y sólo entonces se inicia la aplicación. Esto está garantizado para tomar algún tiempo.
-
El primer código que se ejecutará es el método
onCreate()
la aplicación, pero si su aplicación se mantiene en la memoria de fondo / teléfono, este método no se ejecutará al hacer clic en el icono del lanzador de aplicaciones, buscando
Creo que será más rápido si en lugar de bloquear la pantalla de la aplicación puede crear un widget para hacer lo mismo. Será más rápido y más eficiente. Esto podría ayudarte
Creo que esto te ayudará.
public class MainActivity extends AppCompatActivity { DevicePolicyManager deviceManger; ComponentName compName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); deviceManger = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE); compName = new ComponentName(this, ScreenOffAdminReceiver.class); } @Override protected void onStart() { super.onStart(); if (deviceManger.isAdminActive(compName)) { deviceManger.lockNow(); finish(); } else { Intent intent = new Intent("android.app.action.ADD_DEVICE_ADMIN"); intent.putExtra("android.app.extra.DEVICE_ADMIN", compName); intent.putExtra("android.app.extra.ADD_EXPLANATION", "Device Policies"); startActivityForResult(intent, 0); } } }
- Los anuncios de vídeo de Admob Reward no funcionan con los dispositivos de prueba
- Facebook Android SDK 4.0.0 no obtener información del perfil