Android 闹铃定时器实现

此demo实现了一个闹铃,用AlarmManager对象设定闹铃,时间到了后,系统会调用设定好的BroadcastReceiver、Service或者Activity。

AlarmManager可以设置以下五种类型(demo中使用的第二种):

这里写图片描述

注意:此demo在原生Android系统上没问题,但在国内大多数定制机上,如果关闭后台,闹铃一般不会触发 ╮(╯_╰)╭

demo下载地址:http://download.csdn.net/detail/youmingyu/9715802

MainAvtivity:

package fk.androiddemo_030;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    Button setAlarmBut,cancelAlarmBut;
    EditText keyEdit,timeEdit;
    int alarmKey, alarmTime;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        keyEdit=(EditText)findViewById(R.id.keyEdit);
        timeEdit=(EditText)findViewById(R.id.timeEdit);

        setAlarmBut = (Button) findViewById(R.id.setAlarmBut);
        setAlarmBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alarmKey=Integer.parseInt(keyEdit.getText().toString().trim());
                alarmTime=Integer.parseInt(timeEdit.getText().toString().trim());
                alarmTime=alarmTime*1000;//换成毫秒

                Intent intent = new Intent(MainActivity.this, AlarmService.class);
                //Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
                intent.putExtra("alarmKey",alarmKey);

                //PendingIntent还可以用getActivity()直接启动Activity
                PendingIntent sender = PendingIntent.getService(MainActivity.this, alarmKey, intent, 0);
                //PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, alarmKey, intent, 0);

                long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的运行时间(包括睡眠时间)
                firstTime += alarmTime;

                // 进行闹铃注册
                AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
                //manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 3000, sender);//重复闹钟
                manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, sender);

                Toast.makeText(MainActivity.this, "设置"+alarmKey+"号闹铃", Toast.LENGTH_LONG).show();

                //MainActivity.this.finish();
            }
        });

        cancelAlarmBut = (Button) findViewById(R.id.cancelAlarmBut);
        cancelAlarmBut.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alarmKey=Integer.parseInt(keyEdit.getText().toString().trim());

                Intent intent = new Intent(MainActivity.this, AlarmService.class);
                //Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
                PendingIntent sender = PendingIntent.getService(MainActivity.this, alarmKey, intent, 0);
                //PendingIntent sender = PendingIntent.getBroadcast(MainActivity.this, alarmKey, intent, 0);

                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.cancel(sender);// 取消闹铃

                Toast.makeText(MainActivity.this, "取消"+alarmKey+"号闹铃", Toast.LENGTH_LONG).show();

                //MainActivity.this.finish();
            }
        });
    }
}

AlarmService:

package fk.androiddemo_030;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class AlarmService extends Service {
    public AlarmService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        int alarmKey=intent.getIntExtra("alarmKey",-1);
        Toast.makeText(ContextUtil.getInstance(), alarmKey+"号闹铃响了, 可以做点事情了~~AlarmService", Toast.LENGTH_LONG).show();

        return super.onStartCommand(intent, flags, startId);
    }
}

AlarmReceiver:

package fk.androiddemo_030;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class AlarmReceiver extends BroadcastReceiver {
    public AlarmReceiver() {}

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving

        int alarmKey=intent.getIntExtra("alarmKey",-1);
        Toast.makeText(context, alarmKey+"号闹铃响了, 可以做点事情了~~AlarmReceiver", Toast.LENGTH_LONG).show();
    }
}

运行截图:

这里写图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章