2014-11-24 1 views
0

알람 관리자를 사용하여 8시 30 분에 인 텐트를 보내려고하지만 알람 관리자가 8시 30 분 경에 수신자에게 인 텐트를 보내지 않습니다.Android Alarm Manager : 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 (intent)를 호출하면 모든 관심있는 BroadcastReceivers에게 인 텐트를 보냅니다. 대신 일을

:

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

는 의도 생성자에 브로드 캐스트 리시버를 통과하십시오.

+0

정말 고마워요 !!!!!! –

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

작동하지 않는 것 같지만 감사합니다. –