首页 > 解决方案 > 如何使用 TimePicker 设置闹钟?

问题描述

我的代码是

package alarmclock.alarmclock;


import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;

public class home extends AppCompatActivity {
    TimePicker tp;
    TextView tvw;
    Button bt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        tp=findViewById(R.id.time);
        tvw=findViewById(R.id.tv);
        bt=findViewById(R.id.btn);

        bt.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.M)
            @Override
            public void onClick(View v) {


                Intent i =new Intent(home.this,alarms.class);
                startActivity(i);

                String hr=String.valueOf(tp.getHour());
                String m=String.valueOf(tp.getMinute());
                String tame=hr+"::"+m;


                tvw.setText(tame);

                String str=tvw.getText().toString();
                int b=Integer.parseInt(str);
                PendingIntent pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),123456,i,0);
                AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
                //How to set Timing in place of System.currentTimeMills()//
                alarmManager.set(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(),pendingIntent);


            }
        });
    }

}

报警广播接收器类

package alarmclock.alarmclock;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;

public class alarms extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        MediaPlayer mp;
        mp=MediaPlayer.create(context,R.raw.alarm);
        mp.start();
    }
}

标签: javaandroid

解决方案


MainActivity.java

public class MainActivity extends Activity {

TimePicker myTimePicker;
Button buttonstartSetDialog;
TextView textAlarmPrompt;
TimePickerDialog timePickerDialog;

final static int RQS_1 = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textAlarmPrompt = (TextView) findViewById(R.id.alarmprompt);

    buttonstartSetDialog = (Button) findViewById(R.id.startAlaram);
    buttonstartSetDialog.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            textAlarmPrompt.setText("");
            openTimePickerDialog(false);

        }
    });

}

private void openTimePickerDialog(boolean is24r) {
    Calendar calendar = Calendar.getInstance();

    timePickerDialog = new TimePickerDialog(MainActivity.this,
            onTimeSetListener, calendar.get(Calendar.HOUR_OF_DAY),
            calendar.get(Calendar.MINUTE), is24r);
    timePickerDialog.setTitle("Set Alarm Time");

    timePickerDialog.show();

}

OnTimeSetListener onTimeSetListener = new OnTimeSetListener() {

    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

        Calendar calNow = Calendar.getInstance();
        Calendar calSet = (Calendar) calNow.clone();

        calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
        calSet.set(Calendar.MINUTE, minute);
        calSet.set(Calendar.SECOND, 0);
        calSet.set(Calendar.MILLISECOND, 0);

        if (calSet.compareTo(calNow) <= 0) {
            // Today Set time passed, count to tomorrow
            calSet.add(Calendar.DATE, 1);
        }

        setAlarm(calSet);
    }
};

private void setAlarm(Calendar targetCal) {

    textAlarmPrompt.setText("\n\n***\n" + "Alarm is set "
            + targetCal.getTime() + "\n" + "***\n");

    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(
            getBaseContext(), RQS_1, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
            pendingIntent);

}  
}

接收者.java

public class AlarmReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context k1, Intent k2) {
    // TODO Auto-generated method stub
     Toast.makeText(k1, "Alarm received!", Toast.LENGTH_LONG).show();

}
}

main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="10dp" >

<Button
    android:id="@+id/startAlaram"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Set Alaram Time" />

<TextView
    android:id="@+id/alarmprompt"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000" />

</LinearLayout>

不要忘记将此添加到您的清单文件中

AndroidManifest.xml

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <receiver android:name=".AlarmReceiver" android:process=":remote" />
</application>

推荐阅读