Android

[android 10] 백그라운드 서비스가 동작을 멈추었다.

안드로이드 9까지는 포그라운그에 백그라운드 서비스를 올린 후 노티를 해주면 정상적으로 동작하였다.
하지만 안드로이드 10(android Q)부터는 어찌된 영문인지 동작을 하지 않는다.
새로운 운영체제가 나올 때 마다 백그라운드 서비스정책이 더 억압적으로 변해간다.
워크매니저는 제대로 동작하는가?? 테스트를 진행하였다.

final WorkManager mWorkManager = WorkManager.getInstance();
//final OneTimeWorkRequest mRequest = new OneTimeWorkRequest.Builder(BatteryWorkManager.class).build();
Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build();
PeriodicWorkRequest pRequest = new PeriodicWorkRequest.Builder(BatteryWorkManager.class, 15, TimeUnit.MINUTES).build();
//.setConstraints(constraints).build();
mWorkManager.enqueue(pRequest);
Log.d(TAG, “############## BatteryWorkManager 호출완료”);

15분 후에 정확하게 호출되었다. 하지만 거기까지였다. 여전히 Activity창이 노출되지않았다. 분명 다른 문제로 보였다.
WorkManager 코드를 제거하고 백그라운드 서비스에 LOG를 찍도록 모두 추가하였다. 그랬더니 와우……
백그라운드서비스는 정상적으로 동작하고 있었다. 단지 Activity창 노출 코드도 정확히 호출하였다.
2019-10-17 13:28:25.327 14063-14063/D/ddolcat: ############## [Receiver] isAlarm : false
2019-10-17 13:28:25.328 14063-14063/E/ddolcat: ############################ [Receiver] 수치- 85
2019-10-17 13:28:25.329 14063-14063/E/ddolcat: ############################ [callCompleteActivity]
private void callCompleteActivity(Context context, Intent intent){
    try {
        Log.e("ddolcat", "############################ [callCompleteActivity]  start " );
        Intent sIntent = new Intent(context, MainActivity.class);
        sIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);  
        sIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        //Activity가 아닌 곳에서 startActivity를 사용하려고 할때 필수

        context.startActivity(sIntent);
        Log.e("ddolcat", "############################ [callCompleteActivity]  finish " );
    }catch (Exception e){

    }
}

MainAcitivy 창 노출을 하지 못했다. 안드로이드 10 부터 안된다. 전체 화면으로 띄우는게 그렇게 문제가 된다는 것일까?

정말 백그라운드 서비스 단에서 Activity를 호출하지 못하는 것인가??? 불행하게도 아래 게시물에 보면 불가능하다!!

Restrictions on starting activities from the background

안드로이드 10부터 noti를 주고 USE_FULL_SCREEN_INTENT를 사용하여 전체화면으로 activity를 띄워야한다.

USE_FULL_SCREEN_INTENT

알림 만들기  |  Android 개발자  |  Android Developers

알림은 사용 중이 아닌 앱의 이벤트에 관한 짧고 시기적절한 정보를 제공합니다. 이 페이지에서는 Android 4.0(API 레벨 14) 이상의 다양한 기능을 사용하여 알림을 만드는 방법을 설명합니다. Android에서 알림이 표시되는 방식에 관한 소개는 알림 개요를 참조하세요. 알림을 사용하는 샘플 코드에 관해서는 Android 알림 샘플을 참조하세요. 이 페이지의 코드에서는 Android 지원 라이브러리의 NotificationCompat API를 사용

developer.android.com

USE_FULL_SCREEN_INTENT

Added in API level 29
public static final String USE_FULL_SCREEN_INTENT

Required for apps targeting Build.VERSION_CODES.Q that want to use notification full screen intents.
Protection level: normal
Constant Value: “android.permission.USE_FULL_SCREEN_INTENT”

우선순위가 높은 알림 만들기

Leave a Reply

error: Content is protected !!