简体   繁体   English

当仅使用BroadcastReceiver时,FLAG_RECEIVER_REGISTERED_ONLY是否有解决方法?

[英]Is there a workaround for FLAG_RECEIVER_REGISTERED_ONLY, when using only a BroadcastReceiver?

I want to be alerted, if a headset is plugged in. But the Intent "ACTION_HEADSET_PLUG" is used with the Flag "FLAG_RECEIVER_REGISTERED_ONLY". 如果插入了耳机,我希望收到警报。但是Intent“ACTION_HEADSET_PLUG”与标志“FLAG_RECEIVER_REGISTERED_ONLY”一起使用。 So I have to run a service or a activity all the time to get the intent? 所以我必须一直运行服务或活动才能获得意图? I just want to run a Broadcastreceiver and NO service or activity at all. 我只是想运行Broadcastreceiver而且根本没有服务或活动。 Is there a workaround for this? 这有解决方法吗? Is this even possible? 这甚至可能吗? Or can I start a service once, registering and then stopping it? 或者我可以启动一次服务,注册然后停止它吗?

PS: I know when the headset is plugged off with the becoming noisy intent. PS:我知道当耳机插入时会变得嘈杂。

Thank you for you answers. 谢谢你的答案。

Dianne Hackborn says Dianne Hackborn说

It's only given to those who call registerReceiver, and not sent to receivers declared in manifests. 它仅发给那些调用registerReceiver的人,而不是发送给清单中声明的​​接收者。

So you have to have something running that calls registerReceiver . 所以你必须运行一些调用registerReceiver东西。 It that stops running and you don't unregister the receiver you get an error. 它停止运行,你没有注销接收器,你得到一个错误。

There are components that should be registered when the application is installed (<3.0), or at least when the application has moved from stopped state to started (3.0 & ICS), such as a ContentProvider . 安装应用程序时应该注册的组件(<3.0),或者至少在应用程序从停止状态移动到启动(3.0和ICS)时,例如ContentProvider

The provider apparently doesn't have an "end" to it's life cycle that you have to worry (a lot) about. 提供商显然没有“终结”它的生命周期,你必须担心(很多)。

Simply put, adding a <provider> to your AndroidManifest.xml : 简而言之,在您的AndroidManifest.xml添加<provider>

<provider android:name=".ReceiverProvider"
    android:authorities="some.provider.authority.goes.here"
    android:exported="true" />

And, for the ReceiverProvider : 而且,对于ReceiverProvider

public class ReceiverProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                System.out.println("Headset plug: " + intent);
            }
        };
        IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        getContext().registerReceiver(receiver, filter);
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
            String sortOrder) {
        return null;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}

Worth trying perhaps. 也许值得尝试。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何接收标记为FLAG_RECEIVER_register_ONLY_BEFORE_BOOT的意图 - How to receive intents flagged FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT 动态注册BroadcastReceiver-未注册接收器 - Dynamically registering BroadcastReceiver - Receiver not registered Android-如何引用在BroadcastReceiver中注册接收者的活动? - Android - How to reference activity that registered receiver in BroadcastReceiver? 仅在某些活动上使用广播接收器 - Using broadcastreceiver only on certain activity 使用LocalBroadcastManager注册BroadcastReceiver时,不会调用onReceive - onReceive not being called when BroadcastReceiver is registered using LocalBroadcastManager BroadcastReceiver仅在打开应用程序时有效 - BroadcastReceiver works only when application is opened 注册时触发BroadcastReceiver onReceive - BroadcastReceiver onReceive triggered when registered 电池状态,无活动,仅使用广播接收器 - Battery status without activity only using broadcastreceiver Android BroadcastReceiver生命周期:动态注册接收器的文档错误? - Android BroadcastReceiver Lifecycle: documentation wrong for dynamically registered receiver? BroadCast Receiver不触发(仅在设备重新启动时) - BroadCast Receiver Not triggering(Only when device restart)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM