2015-07-05 44 views
1

我正在尝试制作一个应用程序,允许用户使用两个TimePickers输入两次,手机将在这些时间之间设置为无声。我正在使用PendingIntent和AlarmManager在用户选择的时间触发BroadcastReceiver。 目前,当用户点击保存按钮时,立即开启和关闭手机。然后我的“闹钟预定”烤面包就会出现,我的“收到的广播”会出现两次,但在此之后它什么也不做。待处理意图立即触发

这里是我的主要活动代码:

public class MainActivity extends AppCompatActivity { 

AlarmManager alarm; 
TimePicker timePickerStart; 
TimePicker timePickerEnd; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    timePickerStart = (TimePicker)findViewById(R.id.timePickerStart); 
    timePickerStart.setIs24HourView(true); 
    timePickerEnd = (TimePicker)findViewById(R.id.timePickerEnd); 
    timePickerEnd.setIs24HourView(true); 

} 


//method is called when save button is clicked 
public void setAlarm(View view) { 
    Calendar calendarStart; 
    Calendar calendarEnd; 

    calendarStart = Calendar.getInstance(); 
    calendarEnd = Calendar.getInstance(); 


    //Set calendars to the times in both TimePickers 
    calendarStart.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, timePickerStart.getCurrentHour(), timePickerStart.getCurrentMinute()); 
    long startTimeMillis = calendarStart.getTimeInMillis(); 

    calendarEnd.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, timePickerEnd.getCurrentHour(), timePickerEnd.getCurrentMinute()); 
    long endTimeMillis = calendarEnd.getTimeInMillis(); 



    //create an intent and set the class that will be triggered by the intent 
    Intent intent = new Intent(MainActivity.this, Receiver.class); 
    PendingIntent pIntent = null; 
    pIntent = PendingIntent.getBroadcast(this, 123, intent, PendingIntent.FLAG_UPDATE_CURRENT); 


    //create alarm manager 
    alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    //set alarms to go off at the time specified by the timePickers 
    alarm.set(AlarmManager.RTC_WAKEUP, calendarStart.getTimeInMillis(), pIntent); 
    alarm.set(AlarmManager.RTC_WAKEUP, calendarEnd.getTimeInMillis(), pIntent); 

    //Toast for feedback 
    Toast.makeText(this, "Alarm Scheduled", Toast.LENGTH_SHORT).show(); 

} 

这里是我的广播接收器:

public class Receiver extends BroadcastReceiver { 

AudioManager audioManager; 
int modeNum; 


@Override 
public void onReceive(Context context, Intent intent) { 

    //toast for feedback 
    Toast.makeText(context, "Broadcast Received", Toast.LENGTH_SHORT).show(); 


    audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 

    modeNum = audioManager.getRingerMode(); 
    if (modeNum == 0) { 
     audioManager.setRingerMode(2); 
    } else { 
     audioManager.setRingerMode(0); 
    } 
} 

}

这是我的清单:

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name=".Receiver"></receiver> 
</application> 

回答

1

你有多个问题。

首先,您尝试使用相同的PendingIntent创建两个警报。这是行不通的。你的第二个报警请求将取消第一个报警请求。您需要不同PendingIntent对象,这意味着要么与PendingIntent对象包装的对象实质上不同,要么使用两个不同的值,即123

二,您的set()来电Calendar不正确。例如,在这两个地方,你的第一个参数应该是年份。您正在通过Calendar.YEAR,这是1,而不是2015