【问题标题】:Show Dialog box in another application and bring on front on top of other application在另一个应用程序中显示对话框并置于其他应用程序之上
【发布时间】:2014-05-02 15:07:34
【问题描述】:

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

【问题讨论】:

    标签: android dialog android-activity android-linearlayout


    【解决方案1】:
    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;
    

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

    【讨论】:

      【解决方案2】:

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

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

      对 StackOverflow 线程的回答提供了如何执行此操作的示例:
      Having application running above other app

      【讨论】:

        【解决方案3】:

        您可以使用 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" />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-31
          • 2017-01-21
          相关资源
          最近更新 更多