У меня возникла странная ситуация, когда получатель намерения регистрируется в LocalBroadcastManager либо из службы, либо из MainActivity, а когда намерение отправляется из получателя PHONE_STATE (определено в AndroidManifest.xml), оно никогда не было получено.
«Самопроверка» с отправкой того же намерения из Activity | Service — работает.
Стоит ли пытаться указать намерение LocalBroadcastManager для получения через AndroidManifest.xml?
Услуга определяется как:
<service
android:name=".AppService"
android:process=":remote">
<intent-filter>
<action android:name="me.cmp.app.AppService" />
</intent-filter>
</service>
В сервисе:
public class AppService extends Service {
@Override
public void onCreate() {
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("me.cmp.app.statechange"));
// self-test uses same intent sending code:
Intent intent2 = new Intent("me.cmp.app.statechange");
intent2.putExtra("message", "selfsend");
LocalBroadcastManager.getInstance(this).sendBroadcastSync(intent2);
}
...
В манифесте:
<receiver android:name="me.cmp.app.PhoneReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" >
</action>
</intent-filter>
</receiver>
Слушатель:
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
Log.e("test", extras.getString(TelephonyManager.EXTRA_STATE));
Intent intent2 = new Intent("me.cmp.app.statechange");
intent2.putExtra("message", state.toString());
LocalBroadcastManager.getInstance(context).sendBroadcastSync(intent2);
Log.w("test", "Broadcast sent");
}
}
}
--
Основная проблема заключается в том, что должен ли я использовать Android : process =:remote в моем приемнике? ; однако я до сих пор не уверен, почему приемник MainActivity не работал раньше, возможно, необходимы полные имена.
App
, тогда как в манифестеAppService
. Я бы удостоверился, что служба работает, но я бы удалилandroid:process=":remote"
, чтобы посмотреть, поможет ли это. - person A--C   schedule 10.01.2014MainActivity's receiver didn't worked earlier?
Если служба - это единственное, что являетсяremote
, имеет смысл, чтоLocalBroadcasts
не будет работать должным образом. - person A--C   schedule 10.01.2014