gpt4 book ai didi

android - 如何显示从后台 Activity 启动的对话框

转载 作者:太空狗 更新时间:2023-10-29 16:18:18 31 4
gpt4 key购买 nike

我的应用程序在后台,我使用的服务会在满足特定条件时发送广播:

if(send)
{
Intent intent = new Intent(Tags.MSG_BROADCAST_ID);
intent.putExtra(Tags.MESSAGE, msg);
Log.w(Tags.DEBUG,"Broadcast");
sendBroadcast(intent);
}
}

我的广播接收器收到广播,它应该显示一个警告对话框。我用这个:

public void onReceive(Context context, Intent intent)
{
Bundle bundle = intent.getExtras();
if (bundle != null && Globals.MainActivity != null)
{
msg = bundle.getString(Tags.MESSAGE);
Globals.MainActivity.ShowMessage(msg);
}
}

当我的主要 Activity 在前台时,警报会正确显示。当它在背景中时,什么都看不见。

Runnable runnable = new Runnable()
{
public void run()
{
KeyguardManager km = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
final KeyguardManager.KeyguardLock kl = km.newKeyguardLock("My_App");
kl.disableKeyguard();
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.FULL_WAKE_LOCK, "My_App");
wl.acquire();

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
MainActivity.this);

// set title
alertDialogBuilder.setTitle("Your Title");

// set dialog message
alertDialogBuilder
.setMessage("Click yes to exit!")
.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close
// current activity
dialog.dismiss();
}
}
);

// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alertDialog.getWindow().setType(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
// show it
alertDialog.show();
wl.release();
}
};
runOnUiThread(runnable);

我尝试使用对话框主题 Activity 而不是对话框,但它使 Activity 成为焦点(我只需要对话框)。因为我需要在锁定屏幕上显示,所以我在对话框中添加了一些标志,以及以下权限:

 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

我在 Android 2.3.6 上测试过。

我应该设置什么才能使我的对话框可见?

最佳答案

根据您的回答和一些搜索,我得到了这个结果(可能不符合 Google UI 指南):

创建一个表示警报的 Activity

public class DialogMessageActivity extends Activity

AndroidManifest.xml 中将其主题设置为 Theme.Translucent

 android:theme="@android:style/Theme.Translucent"

onCreate 中删除其 setContentView 函数

super.onCreate(savedInstanceState);
//setContentView(R.layout.dialog_message);

添加一个 AlertDialog 并从 onCreate 调用它的show

super.onCreate(savedInstanceState);
//setContentView(R.layout.dialog_message);
displayAlert(msg);



private void displayAlert(String msg)
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(msg).setCancelable(
false).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}

从任何其他 Activity (前台或后台 Activity ,无论)调用它时,使用以下标志:

 Intent intent=new Intent(this,DialogMessageActivity.class);
intent.putExtra(Tags.MESSAGE,msg);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

通过这些步骤,您可以创建一个看似与主应用程序分离并独立显示的对话框。

关于android - 如何显示从后台 Activity 启动的对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21803700/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com