2017-12-10 12 views
1

내 응용 프로그램이 사용자 지정 응용 프로그램 클래스로 포 그라운드에 있는지 여부를 확인하는 논리를 개발 중입니다. 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 클래스를 등록해야

답변

1

,

처럼
<application 
     android:name=".MyAppStatus" 
+0

네, 효과가 있습니다. 고마워. 이 답변을 정답으로 표시 할 수있는 방법을 알려주십시오. –

+0

@ShawnKang 나는 행복하게 코딩 할 수있어서 기뻐요. –

+1

예, 했어요. 그것은 제가 받아 들인 첫 번째 질문입니다. 고마워. :) –

0

대신 getApplicationContext()를 사용해보십시오 매니 페스트. 그렇지 않으면 잘못된 개체가 표시됩니다.

+0

나는 오타라고 생각한다면 오타라고 생각한다. 오타라고 생각한다면 대답은 'android.app.Application' 객체 다. –

+0

@Pavneet_Singh. – Zoe

+0

귀하의 초기 답변은 오류와 관련이없는 오타를 나타내는 것이었지만 지금은 문제가 무엇인지 생각하고 내 답변을 통합했습니다. 괜찮습니다. –