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

運行截圖:

這裏寫圖片描述

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