2

グローバル定数を格納するために Application を拡張する通常の手法を使用しています。

したがって、私のアクティビティ内では、(oncreate() で) 次のことを簡単に行うことができます。

W = (WcmApplication) getApplicationContext();

ただし、これは放送受信機では機能しません。

The method getApplicationContext() is undefined for the type MyReceiver

それで、私は賢いと思って、私はやろうとしました:

 W = (WcmApplication) context;

...しかし、実行時にブロードキャストレシーバーがそのコンテキストへのアクセスを許可されていないというエラーがスローされます

あきらめないで、私はこれを試します:

W = (WcmApplication) Context.getApplicationContext();

...サイコロなし

だから私はやらなければならなくなった:

W = (WcmApplication)context.getApplicationContext() ;

...そしてそれはうまく機能しますが、理由はわかりません。

なぜ1つが機能し、他の機能が機能しないのかを誰かが説明できますか?

ありがとうございました!

4

3 に答える 3

0

私は包括的な解決策を持っていると思います(最終的に@Franci Penovの投稿に感謝します

これは、カスタム Application サブクラスの静的メソッドです。

public static MyApp get( @NonNull final Context context )
{
    if( s_instance != null )
    {
        return s_instance;
    }
    else
    {
        if( context instanceof Activity )
        {
            final Activity activity = (Activity) context;
            s_instance = (MyApp) activity.getApplication();
        }
        else if( context instanceof Service )
        {
            final Service service = (Service) context;
            s_instance = (MyApp) service.getApplication();
        }
        else if( context instanceof ContextWrapper )
        {
            final ContextWrapper contextWrapper = (ContextWrapper) context;
            s_instance = (MyApp) contextWrapper.getBaseContext().getApplicationContext();
        }
        else
        {
            s_instance = (MyApp) context.getApplicationContext();
        }

        return s_instance;
    }
}
于 2017-09-22T19:06:39.083 に答える
-1

これはアプリケーション コンテキストではありません。

(WcmApplication) context;

むしろ行動の文脈。これが、次のように呼び出す必要がある理由です。

(WcmApplication)context.getApplicationContext() ;
于 2013-06-19T17:24:30.500 に答える