2011-11-13 4 views
5

Ho un HelloWorld applicazione vuota:ricevitore Boot/ScreenOn Broadcast non funziona

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 questo 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);  
    } 
} 

e questo manifesto:

<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> 

Dopo aver eseguito l'applicazione e chiuso idiota.

Quando sblocco schermo (SCREEN_ON) non è successo nulla.

e quando ho avviare il decive mi sto prossimo msg come: "Il TestReceiversActivity applicazione (processo tutorials.TestReceivers) arresto imprevisto prova di nuovo"

+1

SCREEN_ON non funziona da manifest – Selvin

risposta

7

Dopo un lungo periodo di frustrazione, ho risolto il problema precedente.

Il modo giusto per registrare Boot Broadcast Receiver (e l'attività aperta in base ad esso), è:

Blank HelloWorld Application (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); 
    } 
} 

Un altro avvio Classe ricevitore (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: è necessario impostare la bandiera per farlo funzionare!

Impostare il manifesto:

<?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

Utile, grazie – vondip

+0

Per la tua sicurezza, Usa PendingIntent per avviare l'attività .. – cmcromance

4

Elimina android-permission="android.permission.RECEIVE_BOOT_COMPLETED". Aggiungi un elemento <uses-permission> per questa autorizzazione come figlio dell'elemento <manifest>.

Se i problemi persistono, utilizzare adb logcat, DDMS o la prospettiva DDMS in Eclipse per esaminare LogCat ed esaminare la traccia di stack associata al crash.

Here is a sample project che mostra come ottenere il controllo all'avvio.

SCREEN_ON non funzionerà dal manifest.

+0

Ancora non funziona. Proverò ad esaminare la traccia dello stack – David