2012-10-23 238 views
0

我已閱讀大多數帖子關於此問題,但仍然無法讓我的實施工作,請你幫忙?從內部啓動廣播接收器

基本上我想從一個活動中啓動一個BroadcastReceiver,每10秒做一件事。所以我設置了鬧鐘,但代碼實際上沒有達到「onReceive()」......我無法發現其他示例中的代碼有任何區別,請您參考一下。

此外,我還沒有將接收器放在清單文件中,因爲我知道它不是必須的,因爲我在活動中註冊它。

謝謝!

package alarm.in; 

import alarm.in.activity.R; 
import android.app.Activity; 
import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.os.PowerManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.TextView; 

public class activityActivity extends Activity { 

    private Alarm alarm; 


    private static final String TAG = "AlarmInActivity"; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     alarm = new Alarm();   
    } 


    public void onResume() { 
     super.onResume(); 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction(ALARM_SERVICE); 
     registerReceiver(alarm, filter); 
    } 

    public void onPause() { 
     super.onPause(); 
     this.unregisterReceiver(alarm); 
    } 

    public void setAlarm(View view){ 
     alarm.SetAlarm(getBaseContext(),1,10);    
    } 

    public void cancelAlarm(View view){  
     alarm.CancelAlarm(getBaseContext());      
    } 


    private class Alarm extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
      wl.acquire(); 

      Log.d(TAG, "Alarm Worked!");  
      wl.release(); 
     } 

     public void SetAlarm(Context context, int minutes, int seconds) 
     { 
      AlarmManager am=(AlarmManager)context.getSystemService(ALARM_SERVICE); 

      Intent i = new Intent(context, Alarm.class); 
      PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
      am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * seconds * minutes, pi); // Millisec * Second * Minute 
      Log.d(TAG, "AlarmSet");   
     } 

     public void CancelAlarm(Context context) 
     { 
      Intent intent = new Intent(context, Alarm.class); 
      PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
      AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE); 
      alarmManager.cancel(sender); 
      Log.d(TAG, "AlarmCancel");  
     } 

    } 


} 

回答

3

您註冊的接收器,卻忘了動作發送到接收器:

Intent intent = new Intent(ALARM_SERVICE); 
sendBroadcast(intent); 
+0

好,我知道,非常感謝!!!!!! – DimC

+0

隨時配偶! ;) – Carnal