【问题标题】: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

【问题讨论】:

    标签: android broadcastreceiver android-permissions


    【解决方案1】:

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

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

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

    【讨论】:

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