0

ダイアログを開こうとすると、次の Android 例外が発生します。

09-20 09:27:46.119: W/System.err(558): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
09-20 09:27:46.139: W/System.err(558):  at android.view.ViewRoot.setView(ViewRoot.java:440)
09-20 09:27:46.139: W/System.err(558):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:181)
09-20 09:27:46.139: W/System.err(558):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:95)
09-20 09:27:46.139: W/System.err(558):  at android.app.Dialog.show(Dialog.java:269)
09-20 09:27:46.139: W/System.err(558):  at android.app.AlertDialog$Builder.show(AlertDialog.java:907)

サービス Android からダイアログを呼び出しており、次のコードを試しました。

handler.post(new Runnable() {
    public void run() {                               
        try{
            new AlertDialog.Builder(getApplicationContext()).setTitle("Alert!").setMessage("SIMPLE MESSAGE!").setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) { 

                }
            }).show();
        } catch(Exception ex){
            ex.printStackTrace();
        }
    }
});
4

3 に答える 3

1

サービスからダイアログを開くことはできません。ダイアログは UI コンポーネントであり、UI 要素 (Activity) に関連付ける必要があります。できることは、ダイアログのように見えるサービスからアクティビティを開始することです。アクティビティの UI に「DialogTheme」を指定して、標準の Android ダイアログのように見せることができます。StackOverflow で「アクティビティ ダイアログ テーマ」を検索するだけです。

于 2012-09-20T11:03:06.457 に答える
0

私は問題が原因であると思いgetApplicationContext()ますそれはnullを返し、正しいコンテキストを渡します...

于 2012-09-20T09:44:09.770 に答える
0

ステップ 1: クラス MyReciever を作成します。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class MyReceiver extends BroadcastReceiver {
    public MyReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)){
            Intent serviceIntent = new Intent(context, MyService.class);
            context.startService(serviceIntent);
        }

        Intent serviceIntent = new Intent(context, MyService.class);
        context.startService(serviceIntent);
    }
}

ステップ 2: クラス MyService を作成する

import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;

public class MyService extends Service {

    public MyService() {
    }

    @Override
    public void onCreate() {

    //your SERVICE code here... 

        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

ステップ 3: MainActivity クラスで Service を開始します。

startService(new Intent(this, MyService.class));
于 2015-08-06T03:20:58.033 に答える