![](/img/trans.png)
[英]How to receive intents flagged FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
[英]Is there a workaround for FLAG_RECEIVER_REGISTERED_ONLY, when using only a BroadcastReceiver?
如果插入了耳机,我希望收到警报。但是Intent“ACTION_HEADSET_PLUG”与标志“FLAG_RECEIVER_REGISTERED_ONLY”一起使用。 所以我必须一直运行服务或活动才能获得意图? 我只是想运行Broadcastreceiver而且根本没有服务或活动。 这有解决方法吗? 这甚至可能吗? 或者我可以启动一次服务,注册然后停止它吗?
PS:我知道当耳机插入时会变得嘈杂。
谢谢你的答案。
它仅发给那些调用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.