2013-01-18 16 views
6

Attualmente sto lavorando a un'applicazione Broadcast Receiver, in cui sto facendo un allarme che dovrebbe visualizzare un messaggio dopo aver inserito i secondi. Ho usato RTC_WAKEUP, il che significa che dovrebbe visualizzare il messaggio quando il dispositivo è acceso e si suppone che accenda il dispositivo e quindi visualizzi il messaggio quando il dispositivo è spento. IL MIO PROBLEMA È CHE IT RTC_WAKEUP NON È SUI DISPOSITIVI MY, ma funziona correttamente quando il dispositivo è acceso. sto incollando il codice della mia domanda. Nella mia applicazione ci sono due classi.RTC_WAKEUP non funziona

MainActivity

public class MainActivity extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    public void startAlert(View view) { 
     EditText text = (EditText) findViewById(R.id.time); 
     int i = Integer.parseInt(text.getText().toString()); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 23432424, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
       + (i * 1000), pendingIntent); 
     Toast.makeText(this, "Alarm set in " + i + " seconds", 
       Toast.LENGTH_LONG).show(); 
    } 
} 

e altro è

MyBroadcastReceiver

public class MyBroadcastReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Jaago Mohan Pyarreee!!!!.", 
      Toast.LENGTH_LONG).show(); 
     } 
    } 

manifesta

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.broadcastreceiver" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="15" /> 
    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 

    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name=".MyBroadcastReceiver" > 
     </receiver> 
    </application> 

</manifest> 
+0

dove stai chiamando questo startAlert (vista vista) da? – krishna

risposta

2

RTC_WAKEUP non si accende sullo schermo, tutto ciò che fa è si sveglia ti CPU in modo che è fatto il tuo lavoro. Per attivare lo schermo è necessario acquisire un Wakelock COMPLETO.

PowerManager pm = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK 
             | PowerManager.ON_AFTER_RELEASE, 
             "wakeup"); 
wl.acquire(); 
// ... do work... 
//show toask 
wl.release(); 
+0

ho usato questo codice ma ora la mia applicazione si sta bloccando. – Prinkal

+0

hai aggiunto il permesso, è utile se puoi pubblicare il registro di crash – nandeesh

+0

sì, ho aggiunto il permesso. – Prinkal

1

Hai il permesso nel tuo Manifesto?

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

ho già usato il permesso nel mio manifest. – Prinkal

0

Correggere il manifest. Invece di

<receiver android:name="MyBroadcastReceiver" > 

è necessario:

<receiver android:name=".MyBroadcastReceiver" > 
+0

ho cambiato MyBroadcastReceiver in. MyBroadcastReceiver, ma questo non funziona per me, il mio problema è lo stesso. – Prinkal

0

Controllato l'applicazione Google DeskClock: com.android.deskclock.alarms.AlarmStateManager (è un BroadcastReceiver)

Nella sua funzione OnReceive utilizzato goAsync():

@Override 
public void onReceive(final Context context, final Intent intent) { 
    final PendingResult result = goAsync(); 
    final PowerManager.WakeLock wl = AlarmAlertWakeLock.createPartialWakeLock(context); 
    wl.acquire(); 
    AsyncHandler.post(new Runnable() { 
     @Override 
     public void run() { 
      handleIntent(context, intent); 
      result.finish(); 
      wl.release(); 
     } 
    }); 
} 

Si dovrebbe fare un tentativo con quello.