自定闹钟改良版

先说一下自己的思路,首先是上一个Demo中 不能像正常的闹钟那样,当你把手机屏幕按黑了以后,并不会自动唤醒屏幕(其他功能都正常),弹出dialog,所以我开始考虑直接用powerManager,在activity中直接唤醒屏幕,但是,这并没有什么luan用,所以我开始考虑,是不是我的powerManager有问题,然而并不是,所以这时候我才突然考虑到,这是我自己定义的app,而不是系统原生的,当我的屏幕黑了,我的activity并不能启动了,所以,唤醒就只能考虑到用广播来做,然后我就自定义了一个广播,因为广播只要是action对上了,就可以启动,但是我考虑到我的powerManager.wakelock并不是什么耗时的操作,这时候我就把代码写在了onReceive()中,来实现了我的唤醒功能.(就是类似于当你的手机屏幕黑了,你还可以继续收到QQ,微信的弹窗,这个就和硬件有关了,当你使用流量,或者wifi状态时,wifi芯片可以唤醒CPU!)

代码如下咯:

//主函数
package zzs.com.vibrator;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.Service;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;
//这个机制的 前提是  AlarmManager设置系统定时 然后sendBroadcast发送广播
// 再用powerManager唤醒 然后就是实现 微信啊 QQ啊  闹钟啊 这种 关了屏幕也能弹出的
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
/*
*
*          ┌─┐       ┌─┐
*       ┌──┘ ┴───────┘ ┴──┐
*       │       ───       │
*       │  ─┬┘       └┬─  │
*       │       ─┴─       │
*       └───┐         ┌───┘
*           │         └──────────────┐
*           │                        ├─┐
*           │                        ┌─┘
*           └─┐  ┐  ┌───────┬──┐  ┌──┘
*             │ ─┤ ─┤       │ ─┤ ─┤
*             └──┴──┘       └──┴──┘
*                 神兽保佑
*                 代码无BUG!
*/
public class MainActivity extends AppCompatActivity {

    private Vibrator mVibrator;
    boolean isOpen = false;
    private Button mSetTime;
    Calendar currentTime = Calendar.getInstance();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        //获取系统的震动服务
        mVibrator = (Vibrator) this.getSystemService(Service.VIBRATOR_SERVICE);
    }

    private void initData() {
        mSetTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                new TimePickerDialog(MainActivity.this, 0, new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        //指定闹钟跳转
                        Intent intent = new Intent(MainActivity.this,AlarmActivity.class);
                        //指定PendingIntent对象
                        PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
                        Calendar c = Calendar.getInstance();
                        c.setTimeInMillis(System.currentTimeMillis());
                        //根据用户选择来创建calendar对象
                        c.set(Calendar.HOUR,hourOfDay);
                        c.set(Calendar.MINUTE,minute);
                        //获取alarmmanager对象
                        AlarmManager aManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                        //设置AlarmManager的set
                        aManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pi);
                        Toast.makeText(MainActivity.this,"闹钟设成功",Toast.LENGTH_SHORT).show();


                    }
                },currentTime.get(Calendar.HOUR_OF_DAY),currentTime.get(Calendar.MINUTE),false).show();
            }
        });
    }

    private void initView() {
        mSetTime = (Button) findViewById(R.id.setTime);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (isOpen == false) {
            mVibrator.vibrate(10000);
            isOpen = true;
        } else {
            mVibrator.cancel();
            isOpen = false;
        }

        return super.onTouchEvent(event);
    }

    public void startV(View v) {
        mVibrator.vibrate(5000);
    }

    public void stopV(View v) {
        mVibrator.cancel();
    }
}
//AlarmActivity
package zzs.com.vibrator;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;

/**
 * Created by Administrator on 2016/3/9.
 */
public class AlarmActivity extends Activity{

    private MediaPlayer mMediaPlayer;
  //  private PowerManager.WakeLock mWakeLock;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //发送一条广播
        Intent intent = new Intent();
        intent.setAction("AA");
        sendBroadcast(intent);
     //   PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
     //   mWakeLock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP,"WeKA");

        //播放起床音乐
        mMediaPlayer = MediaPlayer.create(this, R.raw.test);
        mMediaPlayer.setLooping(true);
        mMediaPlayer.start();
     //   mWakeLock.acquire();
        //创建一个对话框
        new AlertDialog.Builder(AlarmActivity.this).setTitle("我的自定义闹钟哦")
                .setMessage("该起床了").setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //停止音乐
                mMediaPlayer.stop();
                //结束Activity
                AlarmActivity.this.finish();
         //       mWakeLock.release();
            }
        }).show();

    }
}
//最后就是我的广播咯~~
package zzs.com.vibrator;

import android.app.KeyguardManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.widget.Toast;

/**
 * Created by Administrator on 2016/3/9.
 */
public class MyBroadCast extends BroadcastReceiver {
    private PowerManager.WakeLock mWakeLock;

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"test", Toast.LENGTH_SHORT).show();
        //得到powerManager
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        //新建一个WakeLock,并且给type
        pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright").acquire();

        //得到键盘锁管理器对象
        KeyguardManager km= (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE);
        KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");

        //解锁
        kl.disableKeyguard();
    }

}
//当然 你要加权限和注册广播 ,权限给了 ,注册就不说了 
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
 <uses-permission android:name="android.permission.VIBRATE"></uses-permission>
    <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值