전경 서비스가 있습니다. 알림에서 'X'를 클릭하여 중지 할 수 있습니다.알림을 클릭 할 때 앱이 표시되는지 확인
포 그라운드 서비스가 중지되면 다른 활동이 표시되어야합니다.
문제는 "X"버튼을 클릭했을 때 앱이 표시되는지 또는 배경에 있는지 여부를 알 수 없습니다. 앱이 표시되면 활동이 변경되어야합니다.
전경 서비스가 있습니다. 알림에서 'X'를 클릭하여 중지 할 수 있습니다.알림을 클릭 할 때 앱이 표시되는지 확인
포 그라운드 서비스가 중지되면 다른 활동이 표시되어야합니다.
문제는 "X"버튼을 클릭했을 때 앱이 표시되는지 또는 배경에 있는지 여부를 알 수 없습니다. 앱이 표시되면 활동이 변경되어야합니다.
ab 당신의 활동을 포 그라운드에서 실행하든하지 않겠습니까? 여기 당신은 간다 :
public boolean isRunning(Context ctx) {
try {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground
// task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity
.getPackageName();// get the top fore ground activity
PackageManager pm = context.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(
foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo
.loadLabel(pm).toString();
// Log.e("", foregroundTaskAppName +"----------"+
// foregroundTaskPackageName);
if (!foregroundTaskAppName.equals("Your App name")) {
return true;
}
} catch (Exception e) {
Log.e("isAppSentToBackground", "" + e);
}
return false;
}
API 레벨> =
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();
for (ActivityManager.AppTask task : tasks) {
Log.d(TAG, "stackId: " + task.getTaskInfo().stackId);
}
문제에 대한 100 % 보장 솔루션이 없습니다. 가장 간단한의
하나는 글로벌 변수에 보이는 활동을 추적하는 것입니다
public void onResume(){
super.onResume();
App.visibleActivity = this;
}
public void onPause(){
super.onPause();
App.visibleActivity = null;
}
을하지만, 몇 가지 중요한 사항이 있습니다 :
1) 그나마 메모리
누출 방지하기 위해 onPause에서 visibleActivity을 확보하는 것을 잊었다는2) 앱이 기술적으로 배경에있을 때 현재 onPause와 다음 onResume 사이에 시간차가 있습니다.
(21) 활동이 내가이 명 작업, 서비스 용 및 활동에 대한 하나를 얻고 백그라운드에서 실행되는 경우합니다. os에 의해 활동이 죽을 때에 만 하나의 작업이 있습니다. – sativa
@sativa : 예, 스택의 첫 번째 작업이 항상 전경에 있는지 확인해야합니다. – Jai
@ sativa이 코드는 Andoid API 레벨> 21이므로 메소드가 더 이상 사용되지 않습니다. [API 문서 링크] (https : //developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks (int)) – harsh201