前提・実現したいこと
setAlarmClockが機能せず、startForegroundServiceが即実行される。
MainActivityで30秒後に実行するように指定しているが、AlarmServiceで出力している通知が通知エリアに即反映されるため。
なお、「<receiver android:name=".AlarmReceiver" android:process=":remote" />」の「android:process=":remote"」をなくしてからデバッグモードで実行し、30秒待つことなく、「startForegroundService」が即実行されることも確認した。
該当のソースコード
AndroidManifest.xml
xml
1 <receiver android:name=".AlarmReceiver" android:process=":remote" /> 2 <service android:name="AlarmService" /> 3 </application>
MainActivity.java
java
1 Intent intent2 = new Intent(this, AlarmReceiver.class); 2 PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent2, 0); 3 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 4 am.cancel(pendingIntent); 5 6 Intent intentshow1 = new Intent(getApplicationContext(), MainActivity.class); 7 PendingIntent showIntent1 = PendingIntent.getActivity(getApplicationContext(), 0, intentshow1, 0); 8 am.setAlarmClock(new AlarmManager.AlarmClockInfo(30000, showIntent1), pendingIntent);
AlarmReceiver.java
java
1import android.content.BroadcastReceiver; 2import android.content.Context; 3import android.content.Intent; 4import android.os.PowerManager; 5 6public class AlarmReceiver extends BroadcastReceiver { 7 private static PowerManager.WakeLock wl; 8 9 @Override 10 public void onReceive(Context context, Intent intent) { 11 12 PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 13 wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "tag:BarReceiver"); 14 wl.acquire(); 15 16 if (android.os.Build.VERSION.SDK_INT >= 26) { 17 context.startForegroundService(new Intent(context, AlarmService.class)); 18 } else { 19 context.startService(new Intent(context, AlarmService.class)); 20 } 21 22 } 23 24 public static void releaseWakeLock() { 25 if (wl != null) { 26 wl.release(); 27 } 28 } 29}
補足情報(FW/ツールのバージョンなど)
Android Studio3.4
対象API14から28まで
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。