6

처리하고 싶은 백그라운드 작업이 있습니다. 문제는 작업이 완료되면 내 기본 활동이 표시되는 경우에만 사용자에게 결과를 표시하기 위해 새 활동을 호출하고 싶습니다. 그렇지 않은 경우 사용자가 조치를 볼 수 있도록 알림을 보내려합니다. 완료하고, 그가 좋아할 때마다 열 수 있습니다.활동이 표시되지 않는 경우에만 알림 표시

서비스를 사용하여 백그라운드 작업의 시작 및 종료를 처리하고 완료 될 때 메시지를 브로드 캐스팅하려고했지만이 경우에는 활동이 표시되었는지 또는 브로드 캐스트가 처리되지 않았는지 알 수있는 옵션이 없습니다. 알림을 보내야합니다.

이것이 내 문제이며 백그라운드 작업과 서비스에 대한 지식과 경험이 부족하기 때문에 도움을 요청하기로 결정했습니다.

내 사례를 미리 읽어 주셔서 감사 드리며, 도움을 청합니다!

답변

23

여기에 원하는 것을 구현하는 방법을 설명하는 좋은 기사가 있습니다 : Activity or Notification via Ordered Broadcast.

주요 아이디어는 순서가 지정된 브로드 캐스트를 사용하는 것입니다. 아무런 활동없이 살 수있는 BroadcastReceiver을 만들어야합니다. 이를 수행하려면 AndroidManifest.xml 파일에 선언해야합니다. 이 수신기는 Notification을 표시합니다. 또한 화면에 무엇인가를 표시 할 주요 활동에 다른 우선 순위가 높은 BroadcastReceiver을 등록해야합니다. 그런 다음 주문한 방송을 보내면됩니다.

+0

질문을 게시 한 후에 알 수있는 가능한 대답이었고 실제로 좋은 행동이었습니다. 링크는 정말 도움이됩니다. 나는 이것이 내가 따라갈 방법이라고 생각한다! – akalipetis

+3

최고급 우아한 작품! – Orr

+0

@Antonis : 구현 방법에 대한 코드를 제공해 주시겠습니까? – Sam

2

이렇게 해보십시오. isInForground가 true 경우

private static boolean isInForeground; 

onResume(){ 
    isInForground = true; 
} 
onPause(){ 
    isInForground = false; 
} 

은 활동 (표시)를 forground 달리 표시되지이다.

어디에서 왔는지 알고 싶다면 MainActivity에 다음을 추가하십시오.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    onResume(){ 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     prefEditor = prefs.edit(); 
     prefEditor.putBoolean("isInForeground",true); 
     prefEditor.commit(); 
    } 

    onPause(){ 
      pref = PreferenceManager.getDefaultSharedPreferences(this); 
      prefEditor = prefs.edit(); 
      prefEditor.putBoolean("isInForeground", false); 
      prefEditor.commit(); 
    } 

귀하의 서비스에서.

pref = PreferenceManager.getDefaultSharedPreferences(this); 
if(pref.getBoolean("isInForeground", false)){ 
     //MainActivity is in forground 

} 
else{ 
     //not in forground 
} 
1

서비스의 스레드에 작업을 구현하려는 것처럼 들립니다. 액티비티에는 액티비티가 표시되는지 여부를 나타내는 고정 정적 부울을 가질 수 있습니다. 활동은 onResume()에 사용자에게 표시되며 onPause()이 호출 될 때마다 표시되지 않습니다. 부울을 onResume()에서 true로 설정하고 onPause()에서 false로 설정하십시오.

0

SharedPreferences를 사용할 수 있습니다. onStart() 또는 onStop() 일 때 활동의 기본 설정을 업데이트하고 서비스에서 확인하십시오.

희망이 있습니다.

관련 문제