2011-11-13 12 views
5

Tengo una aplicación en blanco HelloWorld:Receptor de arranque/ScreenOn Broadcast no trabajar

package tutorials.TestReceivers; 

import android.app.Activity; 
import android.os.Bundle; 

public class TestReceiversActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Con esta BootReceiver.Java:

package tutorials.TestReceivers; 

import android.content.BroadcastReceiver; 

public class BootReceiver extends BroadcastReceiver { 
public void onReceive(Context context, Intent arg1) { 
    Intent intent = new Intent(context, TestReceiversActivity.class); 
     context.startActivity(intent);  
    } 
} 

y esto manifiesta:

<application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".TestReceiversActivity" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver 
      android-permission="android.permission.RECEIVE_BOOT_COMPLETED" 
      android:name="development.TestReceiversActivity.BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
       <action android:name="android.intent.action.SCREEN_ON" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

Después de ejecutar la aplicación y cerrar g it.

Cuando desbloqueo la pantalla (SCREEN_ON) no pasó nada.

Y cuando arranco la decive Me estoy poniendo al lado MSG como: "El TestReceiversActivity aplicación (proceso tutorials.TestReceivers) se detiene inesperadamente Inténtelo de nuevo"

+1

SCREEN_ON no funciona desde manifiesto – Selvin

Respuesta

7

Después de un largo tiempo de frustración, he resuelto el problema anterior.

La forma correcta para registrar arranque receptor de la emisión (y la actividad abierta según ella), es decir:

blanco aplicación HelloWorld (TestReceiversActivity.java):

package tutorials.TestReceivers; 

import android.app.Activity; 
public class TestReceiversActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

Otra arranque Clase de receptor (BootReceiver. java)

package tutorials.TestReceivers; 

import android.content.BroadcastReceiver; 
public class BootReceiver extends BroadcastReceiver{ 
@Override 
public void onReceive(Context context, Intent intent) { 
     Log.d("DAVID", "Hi, Boot reciver was catch!"); 
     Intent i = new Intent(context, TestReceiversActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
     } 
} 

Nota: ¡Debe configurar la bandera para que funcione!

Establecer el manifiesto en:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="tutorials.TestReceivers" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <receiver android:name=".BootReceiver" > 
      <intent-filter > 
       <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      </intent-filter> 
     </receiver> 
     <activity android:name=".TestReceiversActivity" 
        android:label="@string/app_name"> 
       <intent-filter > 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Enjoy!

+0

Útil, gracias – vondip

+0

Para su seguridad, utilice PendingIntent para iniciar la actividad .. – cmcromance

4

Eliminar android-permission="android.permission.RECEIVE_BOOT_COMPLETED". Agregue un elemento <uses-permission> para este permiso como elemento secundario del elemento <manifest>.

Si los problemas continúan, use adb logcat, DDMS o la perspectiva DDMS en Eclipse para ver LogCat y examinar el seguimiento de pila asociado con su bloqueo.

Here is a sample project que muestra cómo obtener el control en el momento del arranque.

SCREEN_ON no funcionará desde el manifiesto.

+0

Todavía no funciona. Voy a intentar examinar el seguimiento de la pila – David