使用 BroadcastReceiver 询问用户是不是希望打开应用程序 onReceive

Posted

技术标签:

【中文标题】使用 BroadcastReceiver 询问用户是不是希望打开应用程序 onReceive【英文标题】:Use BroadcastReceiver that asks a user if they wish to open app onReceive使用 BroadcastReceiver 询问用户是否希望打开应用程序 onReceive 【发布时间】:2018-02-19 13:52:14 【问题描述】:

我正在尝试创建一个与 USB 闪存驱动器通信的应用程序。一旦收到意图“android.hardware.usb.action.USB_DEVICE_ATTACHED”,我想让用户提示并询问他们是否希望打开应用程序。

目前,我设置了 onRecieve() 以便它启动主要活动

 @Override
public void onReceive(Context context, Intent intent) 

    Intent startIntent = context
            .getPackageManager()
            .getLaunchIntentForPackage(context.getPackageName());

    startIntent.setFlags(
            Intent.FLAG_ACTIVITY_REORDER_TO_FRONT |
                    Intent.FLAG_ACTIVITY_NEW_TASK |
                    Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
    );
    context.startActivity(startIntent);

我想先提示用户许可,我想实现的一个很好的例子是 ES File Explorer Like this

【问题讨论】:

【参考方案1】:

我希望在收到“android.hardware.usb.action.USB_DEVICE_ATTACHED”意图后提示用户并询问他们是否希望打开应用程序。

您要显示的屏幕必须来自您的应用,因此实际上已经启动,即使用户的看法不同。

您可以做的是在收到此广播时启动一个活动(您需要在活动上下文中才能在屏幕上显示内容)。使活动的背景透明,并让它在顶部显示一个处理用户输入的对话框。从那里你要么开始下一个活动,要么不开始。

【讨论】:

嗯,好的。所以在 ES 文件浏览器示例中,他们创建了一个看起来像对话框的活动,询问用户是否要启动主要活动? 我不知道他们是怎么做到的,但是除非应用程序已经在运行并且有一个可以显示对话框(活动或片段)的活动组件,否则您无法显示对话框 您的意思是在应用程序中运行之前已经在某个时间点打开过? 如果该应用之前没有被用户打开过,它将无法进行任何操作。但是让我们假设用户之前已经打开它 - 当广播接收器触发并且您的应用程序正在处理它时,您的应用程序正在“运行”。我的意思是说用户可以认为他正在决定是否启动应用程序,但实际上它已经在运行,否则它无法处理广播 感谢您的帮助。

以上是关于使用 BroadcastReceiver 询问用户是不是希望打开应用程序 onReceive的主要内容,如果未能解决你的问题,请参考以下文章

在单例中使用 BroadcastReceiver 的最巧妙方法等等

BroadcastReceiver(接收广播)

BroadcastReceiver 和 PHONE_STATE 不起作用

BroadcastReceiver中的域事务处理不起作用

Android 通知:使用多个 PendingIntents 点击按钮时打开 Activity 并运行 BroadcastReceiver

使用kotlin从android中的BroadcastReceiver类访问edittext