0

LocalBroadcastManagerを使おうとしていますが、うまくいかないようです。基本的に、intentServiceが実行されているときはいつでもインテントをブロードキャストするようにします。次に、ユーザーがアクティビティをアクティブに使用しているときはいつでも、アクティビティにブロードキャストを受信させたいと思います。

私はここの指示に従おうとしました: 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");      
  }
}

何か助けていただければ幸いです。ありがとうアーミッシュ

4

2 に答える 2

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よくわかりませんが、その行を削除すると機能し始めました。

于 2012-12-29T18:41:04.567 に答える