简体   繁体   中英

Start Broadcast Receiver from within Activity

I have read most posts re this issue, but still can't get my implementation working, can you please help?

Basically I want to initiate a BroadcastReceiver from within an Activity, to do something every 10 seconds. So I set the Alarm, but the code never actually reaches "onReceive()"... I can't spot any difference in my code from other examples, could you please take a look?

Also just to mention that I haven't put a receiver in the manifest file, as I understand that it is not needed since I register it within the activity.

Thank you!

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

    }


}

You registered your receiver, but forgot to send the action to the receiver:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM