繁体   English   中英

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

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

如果插入了耳机,我希望收到警报。但是Intent“ACTION_HEADSET_PLUG”与标志“FLAG_RECEIVER_REGISTERED_ONLY”一起使用。 所以我必须一直运行服务或活动才能获得意图? 我只是想运行Broadcastreceiver而且根本没有服务或活动。 这有解决方法吗? 这甚至可能吗? 或者我可以启动一次服务,注册然后停止它吗?

PS:我知道当耳机插入时会变得嘈杂。

谢谢你的答案。

Dianne Hackborn说

它仅发给那些调用registerReceiver的人,而不是发送给清单中声明的​​接收者。

所以你必须运行一些调用registerReceiver东西。 它停止运行,你没有注销接收器,你得到一个错误。

安装应用程序时应该注册的组件(<3.0),或者至少在应用程序从停止状态移动到启动(3.0和ICS)时,例如ContentProvider

提供商显然没有“终结”它的生命周期,你必须担心(很多)。

简而言之,在您的AndroidManifest.xml添加<provider>

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

而且,对于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;
    }
}

也许值得尝试。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM