Android中广播接收者,实现闹钟功能

1.创建一个广播接收者AlarmReceiver,接收到广播之后,开始震动

package rolechina.jremm.com.test4.pack529;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Vibrator;
import android.util.Log;

/**
 * 广播接收者
 * 接收到 广播
 */

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent != null) {
            Log.e("111","开始震动");
//          接收到广播后响起闹铃,振动器震动 30 秒
            Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
            vibrator.vibrate(3*10000);
        }
    }
}

2.震动要开启的权限在AndroidManifest.xml中

   
    

3.在BroadcastActivity 在20秒后发送广播

package rolechina.jremm.com.test4.pack529;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import java.util.Calendar;

import rolechina.jremm.com.test4.R;

public class BroadcastActivity extends Activity {
    // 设置一个常量
    private String ALARM_EVENT = "com.zhh.android";
    // 实例化一个广播接受者对象
    AlarmReceiver receiver = new AlarmReceiver();

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_broadcast);
        button = findViewById(R.id.button);

        // 注册广播接受者
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ALARM_EVENT);//要接收的广播
        registerReceiver(receiver, intentFilter);//注册接收者

        sendBroadcast();
    }

    /**
     * 发送延时后广播
     * 就是发送闹钟广播
     */
    private void sendBroadcast() {
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 创建一个广播事件的意图
                Intent intent = new Intent(ALARM_EVENT);
                // 创建一个用于广播的延迟意图
                PendingIntent pIntent = PendingIntent.getBroadcast(BroadcastActivity.this, 0, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);
                // 从系统服务中获取闹钟管理器
                AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE);
                // java的日历 类
                Calendar calendar = Calendar.getInstance();
                // 设置系统时间
                calendar.setTimeInMillis(System.currentTimeMillis());
                // 给当前时间加上若干秒,这里时间单位是 秒
                calendar.add(Calendar.SECOND, 20);

                // 开始设定闹钟,延时20秒后,发送广播
                alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pIntent);

            }
        });

        }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //取消注册
        unregisterReceiver(receiver);
    }


}

4.activity_broadcast.xml布局文件



    

你可能感兴趣的:(广播)