[解決済み] ウィンドウを追加できません -- トークンNULLが有効ではありません。
2022-01-30 19:43:44
質問内容
ユーザーがフローティングアイコンをクリックしたときに、カスタムポップアップメニューを表示したい
フローティングアイコンはサービスで作成され、私は何の活動も持っていません。
これは私のフローティングアイコンのコードです
public class copy_actions_service extends Service
{
ImageView copy_ImageView;
WindowManager windowManager;
WindowManager.LayoutParams layoutParams;
@Override
public IBinder onBind(Intent arg0)
{
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate()
{
windowManager=(WindowManager)getSystemService(WINDOW_SERVICE);
copy_ImageView=new ImageView(this);
copy_ImageView.setImageResource(R.drawable.ic_launcher);
copy_ImageView.setAlpha(245);
copy_ImageView.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
showCustomPopupMenu();
}
});
layoutParams=new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
layoutParams.gravity=Gravity.TOP|Gravity.CENTER;
layoutParams.x=0;
layoutParams.y=100;
windowManager.addView(copy_ImageView, layoutParams);
}
private void showCustomPopupMenu()
{
LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=layoutInflater.inflate(R.layout.xxact_copy_popupmenu, null);
PopupWindow popupWindow=new PopupWindow();
popupWindow.setContentView(view);
popupWindow.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, 0);
}
}
は正常に動作していますが、floatボタンをクリックするとアプリが停止し、logcatにこのエラーが表示されます :(
11-23 02:18:58.217: E/AndroidRuntime(3231): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
が、アクティビティがない?
フロートアイコンをクリックするとポップアップメニューが表示されるようにしたいのですが、ポップアップメニューはテキストしか表示されません。
アイコンでポップアップメニューを表示するには?
どのように解決するのですか?
私も同じ問題がありました。 http://www.piwai.info/chatheads-basics 私のように 問題は、現在のアクティビティをポップアップウィンドウに確実に渡すことができないことです。現在のアクティビティを取得する信頼性の低い方法がありそうですが、私はそれをお勧めしません。
私のアプリでそれを解決した方法は、ポップアップウィンドウを使わず、ウィンドウマネージャを使って自作することでした。
private void showCustomPopupMenu()
{
windowManager2 = (WindowManager)getSystemService(WINDOW_SERVICE);
LayoutInflater layoutInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view=layoutInflater.inflate(R.layout.xxact_copy_popupmenu, null);
params=new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
);
params.gravity=Gravity.CENTER|Gravity.CENTER;
params.x=0;
params.y=0;
windowManager2.addView(view, params);
}
これをポップアップウィンドウのように見せたい場合は、背景として透明なグレーのビューを追加し、それにonClickListenerを追加してwindowManagerオブジェクトからビューを削除すればよいのです。
ポップアップのような便利さはありませんが、私の経験では、これが最も確実な方法です。
そして、マニフェストファイルにパーミッションを追加することを忘れないでください。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
関連
-
[解決済み】パッケージ名(Google Analytics)に一致するクライアントが見つからない - 複数のproductFlavorsとbuildTypes
-
[解決済み】java.lang.RuntimeException: アクティビティを開始できない ComponentInfo
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み】Android 1.6: "android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application" (ウィンドウを追加できません。
-
[解決済み] エラー : BinderProxy@45d459c0 is not valid; activity is running?
-
[解決済み] Unable to add window -- android.os.BinderProxy is not valid; is your activity running?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】このアクティビティでは、Theme.AppCompatテーマ(またはその子孫)を使用する必要があります。
-
[解決済み] シンボル 'context' を解決できない
-
[解決済み】「ArrayAdapterはリソースIDがTextViewであることが必要」XMLの問題点
-
[解決済み】Android Intent コンストラクタを解決できない
-
[解決済み】Dalvikとdalvik-cacheとは何ですか?
-
[解決済み】新しいAVDを作成すると、CPU/ABIフィールドに「システムイメージがインストールされていません」と表示される。
-
[解決済み】findViewByIDがnullを返す。
-
[解決済み】android.content.res.Resources$NotFoundExceptionの取得:androidにリソースが存在する場合でも例外が発生する。
-
[解決済み] エラー - Android リソースのリンクに失敗しました (AAPT2 27.0.3 Daemon #0)
-
[解決済み] BIOSのセキュリティ設定でVT-xを有効にする(お使いのコンピュータのドキュメントを参照)。