intentService使用LocalBroadcastManager进行活动

时间:2012-12-28 23:22:10

标签: android-activity broadcastreceiver intentservice

我一直在尝试使用LocalBroadcastManager,但它似乎不起作用。基本上我希望我的intentService在它运行时广播一个intent。 然后,当用户正在积极使用活动时,我希望我的活动接收广播。

我试着按照这里的说明操作: how to use LocalBroadcastManager?

但由于某种原因它不起作用。我没有为被调用的接收器获取任何日志条目。

以下是我的代码的相关部分:

public class MainActivity extends Activity {
  // Debug log tag
  private static final String tag = "PhoneControlMainActivity";

  // Broadcast receiver
  PhoneControlBroadcastReceiver receiver;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // Register the receiver with the local broadcast manager
    receiver = new PhoneControlBroadcastReceiver();
    LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(PhoneControlBroadcastReceiver.SERVICE_OUTPUT));

    // Start IntentService
    try {
      serviceName = startService(new Intent(this, PhoneControlIntentService.class));
    }
    catch(SecurityException e)
    {
      Log.d(tag,"SecurityException occured when starting IntentService: "+ e.getMessage());
      return;
    }

    if(serviceName != null) {
      Log.d(tag,"serviceName NOT NULL");
    }
    else {
      Log.d(tag,"serviceName NULL");
    }
  }
}

public class PhoneControlIntentService extends IntentService  {
  public PhoneControlIntentService() {
    super("PhoneControlIntentService");
  }

  @Override
  protected void onHandleIntent(Intent intent) {    
    Intent msgIntent = new Intent(PhoneControlBroadcastReceiver.SERVICE_OUTPUT);
    msgIntent.putExtra("message", "This is my message!");
    LocalBroadcastManager.getInstance(this).sendBroadcast(msgIntent);
  }
}

public class PhoneControlBroadcastReceiver extends BroadcastReceiver{   
  // Action
  public static final String SERVICE_OUTPUT = "com.axr0284.phonecontrol.SERVICE_OUTPUT";

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d(tag,"onReceive called");      
  }
}

任何帮助都会受到高度赞赏? 谢谢 阿米什

2 个答案:

答案 0 :(得分:3)

LocalBroadcastManager不能在它自己的进程外广播。

答案 1 :(得分:0)

以下是我做错了,service中的AndroidManifest.xml声明有此行

android:process=":PhoneControlIntentService_process"

<service
    android:name=".PhoneControlIntentService" 
    android:label="@string/IntentService_name"
    android:process=":PhoneControlIntentService_process"**
    android:exported="false"/>

这应该作为一个单独的进程启动service。我猜不知怎么会阻止localBroadcastManager正确发送intent。我不太了解它,但当我删除该行时,它开始工作。