2014-11-24 56 views
0

我嘗試使用鬧鐘管理器在8:30發送意圖,但鬧鐘管理員從未在8:30左右將意圖發送給接收方。Android鬧鐘管理器:OnRecive和PendingIntent服務不會被調用

我在setAlarm()方法中搞砸了一些東西,但我找不出來。 此處的許多帖子也提到服務/接收者可能在清單文件中聲明爲錯誤,但我不確定如何在清單中正確包含接收者和服務。我試圖加入軟件包名稱,但它仍然不起作用。

public class EventAlarmReceiver extends WakefulBroadcastReceiver { 
private AlarmManager alarmMgr; 
private PendingIntent alarmIntent; 
private PendingIntent alarmIntent1; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, EventSchedulingService.class); 
    startWakefulService(context, service); 
} 

public void setAlarm(Context context) { 
     alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, EventSchedulingService.class); 
     intent.putExtra("silent", true); 
     alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     // Set the alarm's trigger time to 8:30 a.m. 
     calendar.set(Calendar.HOUR_OF_DAY,8); 
     calendar.set(Calendar.MINUTE, 30); 
     System.out.println(calendar.getTimeInMillis()); 
     alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 
} 
} 

這裏是我的服務文件

package edu.ssui.smartsilent; 

public class EventSchedulingService extends IntentService { 

public EventSchedulingService() { 
    super("EventSchedulingService"); 
} 
@Override 
protected void onHandleIntent(Intent intent) { 
    Log.d("SService", "m1"); 
    AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    if(intent.getExtras().getBoolean("silent")==true){ 
    mgr.setStreamVolume(AudioManager.STREAM_RING, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
    mgr.setStreamVolume(AudioManager.STREAM_ALARM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
    mgr.setStreamVolume(AudioManager.STREAM_SYSTEM, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
    mgr.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
    } 
    else 
    { 
     mgr.setStreamVolume(AudioManager.STREAM_RING, (int) (mgr.getStreamMaxVolume(AudioManager.STREAM_RING)*0.8), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
     mgr.setStreamVolume(AudioManager.STREAM_ALARM, (int) (mgr.getStreamMaxVolume(AudioManager.STREAM_ALARM)*0.8), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
     mgr.setStreamVolume(AudioManager.STREAM_SYSTEM, (int) (mgr.getStreamMaxVolume(AudioManager.STREAM_SYSTEM)*0.8), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
     mgr.setStreamVolume(AudioManager.STREAM_NOTIFICATION, (int) (mgr.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION)*0.8), AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE); 
    } 
    Log.d("SService", "m1"); 
    EventAlarmReceiver.completeWakefulIntent(intent); 

} 

} 

這裏是我的清單

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="edu.ssui.smartsilent" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="16" 
    android:targetSdkVersion="21" /> 
<uses-permission android:name="android.permission.READ_CALENDAR" /> 
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 


<application 
    android:allowBackup="true" 
    android:icon="@drawable/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=".EventAlarmReceiver"></receiver> 
    <service android:name=".EventSchedulingService" /> 
</application> 

</manifest> 

回答

1

要調用:

alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0); 

PendingIntent.getBroadcast(背景下,意圖)將檢索將與上下文進行廣播一個的PendingIntent和意圖你通過了。例如,它會調用Context.sendBroadcast(意圖),它將意向發送給所有感興趣的BroadcastReceivers。

而不是做的:

Intent intent = new Intent(context, EventSchedulingService.class); 

嘗試通過一個BroadcastReceiver的意圖構造。

+0

非常感謝你!!!!!! – 2014-11-24 07:02:48

0

試試這個:

 alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, EventAlarmReceiver.class); 
     intent.putExtra("silent", true); 
     alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     Calendar calendar = Calendar.getInstance(); 
//  calendar.setTimeInMillis(System.currentTimeMillis()); 
     // Set the alarm's trigger time to 8:30 a.m. 
     calendar.set(Calendar.HOUR_OF_DAY,8); 
     calendar.set(Calendar.MINUTE, 30); 
     System.out.println(calendar.getTimeInMillis()); 
     alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); 

也把日誌進行調試,並確保你調用setAlarm()。

0

這個權限添加到您的menifest:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
+0

它似乎沒有工作,但謝謝 – 2014-11-24 06:29:46

相關問題