2011-06-29 61 views
12

問題爲已回答了簡單的解決方案請檢查this如何在Android中設置鬧鐘?

以下是我的代碼,任何機構可以告訴我爲什麼它不工作。我已經從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(); 
    } 

} 

和我的接收器類是

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



} 
+0

如何獲得所有與特定應用程序相關的剩餘細節?這意味着警報ID,文字,標題就像那樣。 – Karthick

+0

爲此,您必須創建一個單獨的數據庫表來存儲它。 – Nitin

+0

有沒有其他的方式來實現這一點,而不使用數據庫? – Karthick

回答

21

我想你想設置的報警6月26日,而不是7月26日。如果是這樣,則將cal.set(Calendar.MONTH,6);更改爲cal.set(Calendar.MONTH,5);,因爲月份基於零。如果您打算在7月26日發出警報,那麼預計在日期時間爲2011年7月26日17:30時

+0

,這是java-logic在行動的例子 – miky

+0

謝謝,你救了我的時間@frieza –

2

警報會觸發您是否將接收器設置在清單文件中? 像這樣

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

是的,但'android:process =「:remote」'不是100%必需的。 –

+0

是啊,夥計,android:過程標籤僅用於在與您自己的應用程序分開的過程中運行服務和接收器。 –

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 [email protected] " + 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); 
     } 
+0

如何獲取與特定應用程序相關的所有剩餘細節?這意味着警報ID,文字,標題就像那樣。 – Karthick

1
1.add this in manifest file 

<receiver android:name=".MyAlarmReciever"> 
      <intent-filter> 
       <action android:name="com.example.helloandroid.alarms" /> 
      </intent-filter> 
     </receiver>   

2. make a activity 

     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 [email protected] " + 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); 

      } 

     } 


    3 . xml file include 


    <?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 .make alarm manager class 


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

     } 
    }