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