简单实现 Android 闹钟

Android 闹钟比如:一次闹钟响过之后开关变为关的状态;直接点击开关不能实现开关闹钟的作用,需要在点击item的菜单中进行更改;未知原因闹钟不准时,不能及时响应,求大神讲解话不多说,看代码MainActivityimport android.app.Activity;import android.app.AlarmManager;import android.app.Alert...
摘要由CSDN通过智能技术生成

Android 闹钟

比如:一次闹钟响过之后开关变为关的状态;直接点击开关不能实现开关闹钟的作用,需要在点击item的菜单中进行更改;未知原因闹钟不准时,不能及时响应,求大神讲解
在这里插入图片描述
在这里插入图片描述

话不多说,看代码

MainActivity

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Switch;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

public class MainActivity extends Activity implements View.OnClickListener {

private ImageButton add;
private ListView alarm;
private Switch open;

private Boolean kai;
public String aaa;
public String clockTime;
public int id;

private String myhour;
private String myminute;

private List<AlarmItem> adapterList = new ArrayList<AlarmItem>();
public AlarmItemAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate( savedInstanceState );
    setContentView( R.layout.main );
    init();
    adapter = new AlarmItemAdapter( this, R.layout.alarm_item, adapterList );
    alarm.setAdapter( adapter );//关联适配器
    readSavedAlarmList();//读取闹钟列表

}

private void init() {
    add = (ImageButton) findViewById( R.id.add );
    alarm = (ListView) findViewById( R.id.alarm );
    add.setOnClickListener( this );
    alarm.setOnItemClickListener( new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
            ShowListItem( position );
        }
    } );
}

public void ShowListView() {

    if (aaa != null && clockTime != null) {
        AlarmItem alarmItem = new AlarmItem( aaa, clockTime, kai );
        adapterList.add( alarmItem );
        adapter.notifyDataSetChanged();  //通知数据集更改
        int id = Integer.parseInt( myhour + myminute ); //   id为当前设置闹钟的时间
        openAlarm( id );
        saveAlarmList();//保存闹钟列表
    }
}


private void openAlarm(int id) {
    AlarmManager alarmManager = (AlarmManager) getSystemService( ALARM_SERVICE );
    PendingIntent pi = PendingIntent.getBroadcast( MainActivity.this, id, new Intent( MainActivity.this, AlarmReceiver.class ), 0 );
    Toast.makeText( this, String.valueOf( id ), Toast.LENGTH_SHORT ).show();
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis( System.currentTimeMillis() );
    c.set( Calendar.HOUR_OF_DAY, Integer.parseInt( myhour ) );
    c.set( Calendar.MINUTE, Integer.parseInt( myminute ) );
    if (kai.equals( true )) {
        if (aaa.equals( "只响一次" )) {
            if (c.getTimeInMillis() > System.currentTimeMillis()) {//获取时间大于当前时间,按设置事件进行闹钟
                alarmManager.set( AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi );
            } else {//否则,第二天这个时间进行闹钟
                alarmManager.set( AlarmManager.RTC_WAKEUP, c.getTimeInMillis() + 24 * 60 * 60 * 1000, pi );
            }
        } else if (aaa.equals( "每天" )) {
            alarmManager.setRepeating( AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 24 * 60 * 60 * 1000, pi );
        }
    }
}


public void ShowListItem(final int position) {
    AlertDialog.Builder builder = new AlertDialog.Builder( this );
    builder.setTitle( "操作选项" );
    builder.setItems( new CharSequence[]{"删除闹钟", "开启/关闭闹钟"}, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            switch (which) {
                case 0:
                    deleteAlarm( position );
                    break;
                case 1:
                    switchAlarm( position );
                    break;
            }
        }
    } );
    builder.show();
}

private void switchAlarm(final int position) {
    open = (Switch) findViewById( R.id.open );
    if (adapter.getItem( position ).getKai() == false) {
        adapter.getItem( position ).setKai( true );
        //开启闹钟
        int id = Integer.parseInt( adapter.getItem( position ).getClock().replace( ":", "" ) );
        //开关为开的情况下设置闹钟,id相同会覆盖掉之前的
        AlarmManager alarmManager = (AlarmManager) getSystemService( ALARM_SERVICE );
        PendingIntent pi = PendingIntent.getBroadcast( MainActivity.this, id, new Intent( MainActivity.this, AlarmReceiver.class ), 0 );
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis( System.currentTimeMillis() );
        String hour= String.valueOf(adapter.getItem( position ).getClock().charAt( 0 )) + adapter.getItem( position ).getClock().charAt( 1 ) ;
        String minute=String.valueOf( adapter.getItem( position ).getClock().charAt( 3 ) )+adapter.getItem( position ).getClock().charAt( 4 );
        Toast.makeText( this, "hour"+hour+"miute"+minute, Toast.LENGTH_SHORT ).show();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值