>

지금까지 해결책없이 머리를 부수고있다. 이 작업을 수행하는 방법에 대한 많은 가이드를 보았습니다 ( 문서 , 자습서 )하고 Android 7에서 성공적으로 발생했습니다. 내가 관리 한 것은 백그라운드에서 서비스가 실행되고 있음을 알리는 알림입니다. 사용자 활동이 변경되었습니다. 내 앱이 완벽하게 작동합니다. 문제는 안드로이드 8과 구글 배터리 관리에 있습니다. 내 서비스는 항상 죽습니다. 그래서 ... 내가 이미이 문제를 극복하려고 시도한 것 :

<올>
  • 사용자에게 내 앱의 배터리 최적화를 비활성화하여 서비스가 중단되지 않도록하는 방법을 설명하십시오. cummon 사용자에게는 문제가 너무 복잡합니다.

  • 추가

    uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"
    
    

  • 코드로 확인하십시오 :

    Intent intent = new Intent();
                String packageName = context.getPackageName();
                PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    if (pm.isIgnoringBatteryOptimizations(packageName)){
                        intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
                    }
                    else {
                        intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                        intent.setData(Uri.parse("package:" + packageName));
                    }
                }
                context.startActivity(intent);
    
    

    그러나 내 앱이 Play 스토어에서 금지 될 수 있다는 점을 이해했으며 이는 큰 문제입니다.

    1. 지속적인 알림이있는 포 그라운드 서비스를 사용하십시오. 문제는 사용자에게이 지속적인 알림과 관련이없는 알림을 보는 것이 매우 악명입니다.

    ActivityRecognitionClient내 앱이 Android 8의 백그라운드에 있어도 활동이 변경되면 항상 알림을 받습니까? 어쩌면 이것을 위해 Google 서비스에 직접 연결 하시겠습니까?

    • 답변 # 1

      DetectedActivityFence 를 사용하여 고려 Awareness API의 일부입니다. 이 경우 브로드 캐스트를 모니터링하고 전송하는 시스템이므로 자체 백그라운드 서비스를 실행할 필요가 없습니다.

      펜스 방송을 받으면 startForegroundService 를 사용할 수 있습니다  방송에 응답합니다. 앱이 백그라운드에 있고 해당 사용자를위한 알림이 잠시 동안 만 표시되는 경우에도 작동합니다.

  • 이전 if statement - 파이썬 - elif가 작동하지 않고 그냥 건너 뜁니다
  • 다음 sql - mysql - max () 및 group by ()가 예상 한 결과가 아님