2011-06-29 25 views
12

Câu hỏi này được đã được trả lời cho giải pháp dễ dàng Vui lòng kiểm tra thisCách đặt Báo thức trong Android?

Tiếp theo là mã của tôi Bất kỳ cơ thể có thể vui lòng cho tôi biết lý do tại sao nó không được làm việc .Tôi đã học được nó từ this tutorial. Nhưng nó không làm việc bất kỳ trợ giúp sẽ được đánh giá cao.

Mã của tôi là

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

} 

và lớp nhận tôi là

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

Làm thế nào để có được tất cả các chi tiết còn lại liên quan đến việc ứng dụng cụ thể? Điều đó có nghĩa là id báo động, văn bản, tiêu đề một cái gì đó như thế. – Karthick

+0

Vì vậy, bạn phải tạo một bảng cơ sở dữ liệu riêng để lưu trữ. – Nitin

+0

Có cách nào khác để đạt được điều đó mà không cần sử dụng cơ sở dữ liệu không? – Karthick

Trả lời

21

Tôi nghĩ rằng bạn muốn đặt chuông cho 26 tháng sáu và tháng bảy 26 không. Nếu vậy, hãy thay đổi cal.set(Calendar.MONTH,6); thành cal.set(Calendar.MONTH,5); vì các tháng là không dựa trên. nếu bạn định báo động sẽ kích hoạt vào ngày 26 tháng 7 thì dự kiến ​​báo thức sẽ kích hoạt khi ngày giờ là ngày 26 tháng 7 năm 2011, 17:30

+0

chính xác, đây là ví dụ về logic java trong hành động – miky

+0

Cảm ơn, bạn đã tiết kiệm thời gian của tôi @frieza –

2

Bạn đã đặt người nhận trong tệp kê khai của mình chưa? Something như

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

Có, nhưng 'android: process =": ​​remote "' không phải là 100% cần thiết. –

+0

Vâng dude, android: thẻ quá trình chỉ dành cho Dịch vụ đang chạy và Người nhận trong một quy trình riêng biệt từ ứng dụng của riêng bạn. –

0

niềm hy vọng này này sẽ giúp

@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

Cách nhận tất cả các chi tiết còn lại được liên kết với ứng dụng cụ thể? Điều đó có nghĩa là id báo động, văn bản, tiêu đề một cái gì đó như thế. – 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()); 

     } 
    } 
Các vấn đề liên quan