내 응용 프로그램이 사용자 지정 응용 프로그램 클래스로 포 그라운드에 있는지 여부를 확인하는 논리를 개발 중입니다. MyFirebaseMessagingService.java에서 클래스를 형 변환하려고하면 오류가 발생합니다. 코드는 아래와 같습니다.사용자 지정 응용 프로그램 클래스의 컨텍스트를 캐스팅하는 방법
boolean isForeground = ((MyAppStatus)getApplication()).isForeground();
또한 다음과 같은 코드를 사용해 보았습니다.
boolean isForeground = MyAppStatus.get(getApplicationContext).isForeground();
및
boolean isForeground = MyAppStatus.get(getApplication).isForeground();
그러나, 나는 같은 캐스트 오류가 발생했습니다.
사용자 지정 응용 프로그램 클래스의 코드는 아래와 같습니다.
public class MyAppStatus extends Application {
private AppStatus mAppStatus = AppStatus.FOREGROUND;
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks());
}
public static MyAppStatus get(Context context) {
return (MyAppStatus)context.getApplicationContext();
}
public AppStatus getAppStatus() {
return mAppStatus;
}
// check if app is foreground
public boolean isForeground() {
return mAppStatus.ordinal() > AppStatus.BACKGROUND.ordinal();
}
public enum AppStatus {
BACKGROUND, // app is background
RETURNED_TO_FOREGROUND, // app returned to foreground(or first launch)
FOREGROUND; // app is foreground
}
오류는 아래와 같습니다.
12-10 22:26:59.256 32544-32633/com.forwards.android.goodhus E/AndroidRuntime: FATAL EXCEPTION: pool-2-thread-1
Process: com.XXXXXX.android.XXXXXX, PID: 32544
java.lang.ClassCastException: android.app.Application cannot be cast to com.XXXXXX.android.XXXXXX.common.utils.MyAppStatus
at com.XXXXXX.android.XXXXXX.common.fcm.MyFirebaseMessagingService.sendToNotificationCenter(MyFirebaseMessagingService.java:187)
위대한 경험을 가진 사람들은 큰 도움이 될 것입니다. 미리 감사드립니다.
을 그리고 응용 프로그램이 응용 프로그램 태그에 android:name=".MyAppStatus"
를 사용하여 설정되어 있는지 확인합니다 :
application
태그에
MyAppStatus
클래스를 등록해야
네, 효과가 있습니다. 고마워. 이 답변을 정답으로 표시 할 수있는 방법을 알려주십시오. –
@ShawnKang 나는 행복하게 코딩 할 수있어서 기뻐요. –
예, 했어요. 그것은 제가 받아 들인 첫 번째 질문입니다. 고마워. :) –