0

SMSメッセージを処理するAndroidアプリケーションがあります。新しいSMSメッセージがAndroidに到着すると、「NEW_SMS」ブロードキャストレシーバーである私のクラスからコードを呼び出します。ご存知のように、私の「sms_recieved_class」の「onReceive」メソッドは、(システムから)何らかのコンテキストを取得します。インテントを使用して、私のSMSブロードキャストレシーバーは、SMSデータベースで何かを行う別のクラスを呼び出します(元々「onReceive」を介してシステムから取得したコンテキストは、別のブロードキャストを送信して他のクラスからコードを呼び出すために使用されます)。

その他のクラスはSMSデータベースで動作し、ブロードキャストレシーバーでもあります。上記の私のクラスから送信されたブロードキャストに反応します。データベースの「混乱」がうまくいかない場合、アプリはカスタムエラーダイアログを表示する必要があります。さて、問題があります!

カスタムエラーダイアログコード:

public static void setUpError(Context act,String ERRMSG, StackTraceElement[] stack) {

AlertDialog.Builder builder = new AlertDialog.Builder(act);

    final StackTraceElement[] finStack = stack;
    final String errMsg=ERRMSG;
    final Context ctxFin = act;

    builder.setMessage(poruka)...setting up alert buttons...

    AlertDialog alert = builder.create();
    alert.show();

}

「alert.show()」行でエラーが発生します。アプリが表示されているときにこのダイアログを表示しようとすると(そして「someAct.this」をコンテキストとして渡すと)、混乱してしまいます。すべて問題ありません。「broadcastReceiver.onReceive」(システムによって呼び出される)から取得したコンテキストを使用してアラートを表示しようとすると、エラーが発生しました。私が間違っているのは何ですか?

PSは、STOVFで回答を検索した後、解決策が「getApplicationContext()を使用しない」であるたびに。電話が新しいメッセージを受け取るときに呼び出される私のクラスは両方とも「アクティビティ」タイプではないので、どうすればよいですか?

4

1 に答える 1

1

まず、Dialog には画面上にあるアクティビティが必要です (したがって、開いているアクティビティがなければ、Dialog を表示することはできません)。できることは、ダイアログのように見えるアクティビティを作成することです。SOからのこの質問を確認してください。

于 2012-05-19T18:38:06.090 に答える