1
回答
为什么alertDialog无法生成?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

按着例子打,alert dialog就是无法生成,在android4.4和android5.1都试过了。

logcat没有error。

onReceive里面log.d是有信息的,能够执行的。

广播已经在manifest注册了。

package com.example.broadcastbestpractice;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.view.WindowManager;

public class ForceOfflineReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(final Context context, Intent intent) {
		AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
		dialogBuilder.setTitle("Warning");
		dialogBuilder.setMessage("You are forced to be offline. Please try to login again.");
		dialogBuilder.setCancelable(false);
		dialogBuilder.setPositiveButton("OK", 
			new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					ActivityCollector.finishAll();
					Intent intent = new Intent(context, LoginActivity.class);
					intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					context.startActivity(intent);
				}
			}
		);
		AlertDialog alertDialog = dialogBuilder.create();
		alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
		alertDialog.show();
	}

}



举报
雪梨苹果
发帖于2年前 1回/218阅
共有1个答案 最后回答: 2年前

我以前在小米的机器上碰到过。原因是系统默认不允许在服务或广播里直接弹出dialog进行显示。你可以在这些机器上找下类似设置,把这个限制取消就好了。

如果你真的要在服务里弹框的话,需要先获取到当前和用户直接打交道的activity(最上层activity),这个你通过activitymanager或者用自己的stack管理activity的方法都能取到。

然后依据这个activity作为alertdialog的依附context,进行弹框即可。


--- 共有 1 条评论 ---
雪梨苹果还是你经验老道,的确是有些rom默认安装app不给使用悬浮窗的。打开就行。。。 2年前 回复
顶部