在另一个应用程序中显示对话框,并在其他应用程序的顶部显示

时间:2014-05-02 15:07:34

标签: android dialog android-activity android-linearlayout

我使用aidl将数据从一个应用程序发送到另一个应用程序。发送数据的应用程序在前面,接收数据的应用程序显示用户的对话框在后台。现在的问题是,在我切换回该应用程序之前,对话框是不可见的。无论如何,他是否可以在不切换回其他应用程序的情况下显示对话框。就像一个来自android的电池电量低的对话框,它可以满足所有需求。

3 个答案:

答案 0 :(得分:0)

ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);

// get the context from the currently running task
List< ActivityManager.RunningTaskInfo > taskInfo = manager.getRunningTasks(1);
Context context = taskInfo.get(0).topActivity;

我不太确定这是否真的适用于那些不是来自你的应用程序的活动,但我现在还没有资源自己测试它,然后再添加它作为答案。 如果您真的能够使用此功能检索当前的顶级活动,那么值得一试。我只希望我的记忆能给我正确的语法......

答案 1 :(得分:0)

您可以使用WindowManager实现此目的,接收数据的应用程序应具有background service。如果要发布广播事件以将数据传递给其他应用程序,则当应用程序收到数据时,启动服务以显示该对话框。

dialog可以是自定义对话框,需要作为视图添加到WindowManager

好的,这是一个带有自定义对话框的示例。您可以使用默认的AlertDialog

尝试相同的方法

当应用程序收到活动时,启动该服务,并在Service调用onStartCommand时显示该对话框。

按照以下步骤...... ..

获取WindowManager

的实例
     WindowManager  windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

夸大自定义视图

     View dialogView = View.inflate(getBaseContext(),R.layout.dialog_layout,null);

向视图添加侦听器。

  dialogView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                windowManager.removeView(dialogView);
                dialogView = null;
            }
        });

设置Window manager params

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
                PixelFormat.TRANSLUCENT);

     params.gravity = Gravity.CENTER | Gravity.CENTER;

将视图添加到Window Manager

   windowManager.addView(dialogView, params);

还在清单

中添加SYSTEM_ALERT_WINDOW权限
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

答案 2 :(得分:0)

实际上,您需要向清单文件添加以下权限才能实现您的目标:
android.permission.SYSTEM_ALERT_WINDOW

http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW

关于以下StackOverflow线程的答案提供了如何执行此操作的示例:
Having application running above other app