有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java以编程方式设置安卓闹钟

我正在尝试构建一个个人应用程序,可以在DeskClock应用程序中设置闹钟。我可以让它在当天的任何时候设置闹钟,但我该如何设置第二天或本周晚些时候的闹钟呢。通过查看安卓中的AlarmClock api,我看不到一种正常的方法来实现这一点。这可能吗

顺便说一句,这是我设置闹钟的代码,可能不太好看,但我正在学习

 package com.netwokz.setit;

    import java.util.Calendar;
    import java.util.GregorianCalendar;

    import 安卓.app.Activity;
    import 安卓.content.Intent;
    import 安卓.os.Bundle;
    import 安卓.provider.AlarmClock;
    import 安卓.view.Menu;
    import 安卓.view.View;
    import 安卓.view.View.OnClickListener;
    import 安卓.widget.Button;
    import 安卓.widget.EditText;

    public class MainActivity extends Activity implements OnClickListener {
    Button btnSetAlarm;
    EditText etHour, etMinute;
    int minute, hour, day;
    Calendar cal;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        btnSetAlarm = (Button) findViewById(R.id.btn_set_alarm);
        etHour = (EditText) findViewById(R.id.etHour);
        etMinute = (EditText) findViewById(R.id.etMinute);
        btnSetAlarm.setOnClickListener(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main_activity, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_set_alarm:
                setAlarm();
                break;
        }
    }

    private void setAlarm() {
        cal = new GregorianCalendar();
        cal.setTimeInMillis(System.currentTimeMillis());
        day = cal.get(Calendar.DAY_OF_WEEK);
        hour = cal.get(Calendar.HOUR_OF_DAY);
        minute = cal.get(Calendar.MINUTE);

        Intent i = new Intent(AlarmClock.ACTION_SET_ALARM);
        i.putExtra(AlarmClock.EXTRA_HOUR, hour + Integer.parseInt(etHour.getText().toString()));
        i.putExtra(AlarmClock.EXTRA_MINUTES, minute + Integer.parseInt(etMinute.getText().toString()));
        i.putExtra(AlarmClock.EXTRA_SKIP_UI, true);
        startActivity(i);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    主要活动。爪哇

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

    接受者。爪哇

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

    主要活动。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>
    

    舱单。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>
    
  2. # 2 楼答案

    试一试悬而未决的意图如何

    只需将日历值更改为提前几天左右

    AlarmManager am = (AlarmManager)getSystemService(alarm);
    
    Intent i= new Intent("MY_INTENT");
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
    
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.MINUTE, 2);
    am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
    
  3. # 3 楼答案

    就像一个真正的闹钟,我看不到为未来的约会设置闹钟的方法。我认为这需要两种选择之一:

    1. AlarmManager(在所需的未来日期触发应用程序服务,在AlarmClock中创建闹钟)和AlarmClock(实际处理闹钟)的组合。不要忘记收听BOOT_COMPLETED broadcast以重置AlarmManager警报,因为它们在重新启动后不会持续

    2. 使用AlarmManager触发模拟报警的应用程序服务和UI。这将要求你考虑电话状态等你不必担心的警报时钟。

    我认为你可以让你的应用程序只打开AlarmClock对话框,允许用户设置重复出现的警报和其他无法通过意图执行的选项