有些情况下,应用程序被安装(< 3.0)应该被注册的组件,或至少当应用程序有从停止状态移动到开始(3.0 & ICS),诸如ContentProvider
。
提供者显然没有一个“结束”它的生命周期,你必须担心(很多)。
简单地说,加入<provider>
您AndroidManifest.xml
:
<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;
}
}
值得一试可能。
在这里你有“没有发送到清单中声明的接收者”的情况 – zapl 2012-03-13 18:36:07
这严重**不正确**。接收器没有在清单中声明,它是的一部分:■onCreate - 当应用程序从停止状态变为启动状态(或立即如果sdk_version <= 10)时触发。 –
Jens
2012-03-14 07:46:22
oops,是。但是,只有在有人向你请求内容之前,ContentProvider才会启动。我想你可以抓住'Intent.ACTION_BOOT_COMPLETED',然后调用'context.getContentResolver()。acquireContentProviderClient(Uri.parse(“content://your.authority”))'来实现这一点。 – zapl 2012-03-14 10:01:30