如何在Android中设置闹钟?

时间:2011-06-29 12:09:49

标签: android alarmmanager

以下是我的代码可以任何正文告诉我为什么它不起作用。我从this tutorial学到了它。但它没有任何帮助将是可以理解的。

我的代码是

import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.ListActivity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;


public class Notify extends Activity {
    Button btn;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.nit);
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.MONTH,6);
        cal.set(Calendar.YEAR,2011);
        cal.set(Calendar.DAY_OF_MONTH,29);
        cal.set(Calendar.HOUR_OF_DAY,17);
        cal.set(Calendar.MINUTE,30);

        //String[] dude=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan","nitin","nitin"};

        //setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,dude));
        //getListView().setTextFilterEnabled(true);

        //String[] dude1=new String[] {"nitin","avi","aman","rahul","pattrick","minkle","manmohan"};

        Intent intent = new Intent(this, Mote.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 1253, intent, PendingIntent.FLAG_UPDATE_CURRENT|  Intent.FILL_IN_DATA);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pendingIntent );
        Toast.makeText(this, "Alarm worked.", Toast.LENGTH_LONG).show();
    }

}

,我的Receiver类

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Mote extends BroadcastReceiver{

    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();
        int icon = R.drawable.icon;
        CharSequence tickerText = "Hello you have to take medicine I am Nitin Sharma";
        long when = System.currentTimeMillis();

        //Notification notification = new Notification(icon, tickerText,when );

        CharSequence contentTitle = "My notification";
        CharSequence contentText = "Hello World!";


        //notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        final int NOTIF_ID = 1234;
        NotificationManager notofManager = (NotificationManager)context. getSystemService(Context.NOTIFICATION_SERVICE);
        // Notification note = new Notification(R.drawable.face,"NEW ACTIVITY", System.currentTimeMillis());
        Intent notificationIntent = new Intent(context, Alset.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context,0, notificationIntent, 0);
        Notification notification = new Notification(icon, tickerText,when );
        //Notification notification1 = new Notification(R.drawable.icon, "Wake up alarm", System.currentTimeMillis());
        notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
        notification.flags = Notification.FLAG_INSISTENT;
        notification.defaults |= Notification.DEFAULT_SOUND;
        //notification.setLatestEventInfo(context, "My Activity", "This will runs on button click", contentIntent);
        notofManager.notify(NOTIF_ID,notification);

        //PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);
        //notification.setLatestEventInfo(context, "Context Title", "Context text", contentIntent);
        //notification.flags = Notification.FLAG_INSISTENT;
    }



}

4 个答案:

答案 0 :(得分:22)

我想你想在6月26日而不是7月26日设置警报。如果是,请将cal.set(Calendar.MONTH,6);更改为cal.set(Calendar.MONTH,5);,因为这些月份是从零开始的。如果您打算在7月26日发出警报,那么当日期时间是2011年7月26日17:30时,预计会发出警报。

答案 1 :(得分:3)

1.在清单文件中添加此内容

 <receiver android:name=".MyAlarmReciever">
            <intent-filter>
                <action android:name="com.example.helloandroid.alarms" />
            </intent-filter>
        </receiver>        
  1. 开展活动

         public class AlrmActivity extends BaseAcitivity {
    
            TimePicker myTimePicker;
            Button buttonstartSetDialog;
            TextView textAlarmPrompt;
    
            TimePickerDialog timePickerDialog;
    
            final static int RQS_1 = 1;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_alrm);
    
                textAlarmPrompt = (TextView)findViewById(R.id.alarmprompt);
    
                buttonstartSetDialog = (Button)findViewById(R.id.startSetDialog);
                buttonstartSetDialog.setOnClickListener(new View.OnClickListener(){
    
                    @Override
                    public void onClick(View v) {
                        textAlarmPrompt.setText("");
                        openTimePickerDialog(false);
    
                    }});
    
    
            }
    
            private void openTimePickerDialog(boolean is24r){
                Calendar calendar = Calendar.getInstance();
    
                timePickerDialog = new TimePickerDialog(
                        AlrmActivity.this,
                        onTimeSetListener,
                        calendar.get(Calendar.HOUR_OF_DAY),
                        calendar.get(Calendar.MINUTE),
                        is24r);
                timePickerDialog.setTitle("Set Alarm Time");
    
                timePickerDialog.show();
    
            }
            TimePickerDialog.OnTimeSetListener onTimeSetListener
                    = new TimePickerDialog.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(), MyAlarmReciever.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);
    
            }
    
        }
    
  2. 3。 xml文件包含

        <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
    
            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="hello" />
            <Button
                android:id="@+id/startSetDialog"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Set Target Time"/>
            <TextView
                android:id="@+id/alarmprompt"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>
    

    4.制作警报管理员课程

        public class MyAlarmReciever extends BroadcastReceiver {
    
            Vibrator v;
            Context ct;
            String  title;
    
    
            @Override
            public void onReceive(Context context, Intent intent) {
    
                // TODO Auto-generated method stub
                ct=context;
    
                Log.e("onReceive", "ladskjflsakjdflskjdflskjdfslkjdflasdf");
                Toast.makeText(context, "OnReceive alarm test", Toast.LENGTH_SHORT).show();
    
                v=(Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
                v.vibrate(3000);
    
                int badgeCount = 1;
               // ShortcutBadger.applyCount(context, badgeCount);
    
                ShortcutBadger.removeCount(context);
    
                Bundle bundle = intent.getExtras();
                try{
                      title = intent.getExtras().get("title").toString();
                     // title = intent.getStringExtra("title");
                    Toast.makeText(context, title, Toast.LENGTH_LONG).show();
                }catch(Exception e){
                    e.printStackTrace();
                }
    
    
        //        if (!Utlis.checkNetworkConnection(context)) {
        //
        //            Notification(context, "Wifi Connection off");
        //
        //        } else {
                    Notification(context, "Please  pray for this prayer ");
    
        //        }
    
            }
    
    
            public void Notification(Context context, String message) {
                // Set Notification Title
                String strtitle = "iPray  Prayer Reminder";
                // Open NotificationView Class on Notification Click
                Intent intent = new Intent(context, PrayerForOtherActivity.class);
                // Send data to NotificationView Class
                intent.putExtra("title", title);
                intent.putExtra("text", title);
                // Open NotificationView.java Activity
                PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent,
                        PendingIntent.FLAG_UPDATE_CURRENT);
    
        //        NotificationCompat.Action action = new NotificationCompat.Action.Builder(R.drawable.app_icon, "Previous", pIntent).build();
                // Create Notification using NotificationCompat.Builder
                NotificationCompat.Builder builder = new NotificationCompat.Builder(
                        context)
                        // Set Icon
                        .setSmallIcon(R.drawable.app_icon)
                        // Set Ticker Message
                        .setTicker(message)
                        // Set Title
                        .setContentTitle(context.getString(R.string.app_name))
                        // Set Text
                        .setContentText(message)
                        // Add an Action Button below Notification
                        // Set PendingIntent into Notification
                        .setContentIntent(pIntent)
                        // Dismiss Notification
                        .setAutoCancel(true);
    
                // Create Notification Manager
                NotificationManager notificationmanager = (NotificationManager) context
                        .getSystemService(Context.NOTIFICATION_SERVICE);
                // Build Notification with Notification Manager
                notificationmanager.notify(38, builder.build());
    
            }
        }
    

答案 2 :(得分:2)

您是否在清单文件中设置了接收器? 像这样的东西

<receiver  android:process=":remote" android:name=".Mote"></receiver>

答案 3 :(得分:0)

希望这会有所帮助

@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);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, pendingIntent);
        }