有些情況下,應用程序被安裝(< 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