Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Alarm Manager:OnReceive和PendingEvent服务未被调用_Android_Alarmmanager_Intentservice - Fatal编程技术网

Android Alarm Manager:OnReceive和PendingEvent服务未被调用

Android Alarm Manager:OnReceive和PendingEvent服务未被调用,android,alarmmanager,intentservice,Android,Alarmmanager,Intentservice,我尝试使用alarm manager在8:30发送意图,但alarm manager从不在8:30左右向接收者发送意图 我发现setAlarm()方法中有一些问题,但我无法解决。 这里的许多帖子也提到了服务/接收者可能在清单文件中声明错误,但我不确定如何正确地将接收者和服务包含在清单中。我已经尝试合并包名,但仍然不起作用 public class EventAlarmReceiver extends WakefulBroadcastReceiver { private AlarmManager

我尝试使用alarm manager在8:30发送意图,但alarm manager从不在8:30左右向接收者发送意图

我发现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>

试试这个:

        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()。

将此权限添加到您的menifest:

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

您正在呼叫:

alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
getBroadcast(上下文,意图)将检索一个PendingEvent,该PendingEvent将使用您传递的上下文和意图执行广播。例如,它将调用Context.sendBroadcast(intent),它将意向发送给所有感兴趣的广播接收器

而不是做:

Intent intent = new Intent(context, EventSchedulingService.class);
尝试将BroadcastReceiver传递给意图构造函数