2013-07-10 123 views
0

不會關閉我使用下面的代碼來設置我的Android應用沉默電話在通過event.getStartTime()廣播接收器在Android應用

public static void schedule(Context ctx, Event event) { 
    //schedule method is being called, but the alarm manager is not being set for some reason 
    Calendar start = event.getStartTime(); 
    long end = event.getEndTime().getTimeInMillis(); 
    String status = event.getStatus(); 

    Intent intent = new Intent(ctx, AlarmReceiver.class); 
    intent.putExtra("time", end); 
    intent.putExtra("status", status); 

    PendingIntent sender = PendingIntent.getBroadcast(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, start.getTimeInMillis(), sender); 
} 

給出的時間,這裏是我的onReceive方法在我AlarmReceiver類擴展BroadcastReceiver

@Override 
    public void onReceive(Context context, Intent intent) { 
     //Toast.makeText(context, "changing status", Toast.LENGTH_SHORT).show(); 
     ContextWrapper c = new ContextWrapper(context); 
     AudioManager am = (AudioManager) c.getBaseContext().getSystemService(Context.AUDIO_SERVICE); 

     Calendar set_time = Calendar.getInstance(); 
     int current_ringer_mode = am.getRingerMode(); 
     String current_status = ""; 

     switch (current_ringer_mode) { 
      case AudioManager.RINGER_MODE_VIBRATE: current_status = "vibrate"; 
      break; 

      case AudioManager.RINGER_MODE_SILENT: current_status = "silence"; 
      break; 

      case AudioManager.RINGER_MODE_NORMAL: current_status = "sound"; 
      break; 

      default: current_status = "silence"; 
      break; 
     } 

     try { 
      Bundle bundle = intent.getExtras(); 
      String status = bundle.getString("status"); 
      set_time.setTimeInMillis(bundle.getLong("time")); 
      if (status.equals("vibrate")) { 
       //turn phone on vibrate 
       am.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 
       if (bundle.getLong("time") != 0L) { 
        //set unscheduler 
        EventScheduler.unschedule(context.getApplicationContext(), 
          set_time, 
          current_status); 
       } 
      } else if (status.equals("silence")) { 
       //turn phone on silence 
       am.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
       if (bundle.getLong("time") != 0L) { 
        //set unscheduler 
        EventScheduler.unschedule(context.getApplicationContext(), 
          set_time, 
          current_status); 
       } 
      } else if (status.equals("sound")) { 
       //turn on sound 
       am.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 
      } 

     } catch(Exception e) { 
      Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
    } 

但是一旦時機成熟時左右被認爲該事件走下車,什麼也沒有發生。我是否正確地做這件事?

回答

1

很懷疑,但是你註冊了BroadcastReceiver和所需的IntentFilter嗎?

編輯: 在您的清單文件,你應該有以下線的應用程序節點

<receiver android:name="your_receiver_name" > 
    <intent-filter> 
     <action android:name="your_action_name" > 
     </action> 
    </intent-filter> 
</receiver> 

內的其他方式這個動態是,調用registerReceiver (BroadcastReceiver receiver, IntentFilter filter)

有關如何一個不錯的教程要使用廣播過濾器,您可以訪問此Vogella Tutorial

希望這將清除您的疑惑並解決問題。

+0

呃,在清單文件中的權利?我不認爲我做過,但我該怎麼做?清單文件中的 – azrosen92

+0

是。或者你也可以通過代碼來完成。你需要調用RegisterReceiver。查看我的答案獲取更多信息。 – Rajeev

+0

如果能解決您的問題,請接受答案。 :-) – Rajeev