Отправьте трансляцию в Service и получите ее в AndroidTestCase

В моем проекте при запуске Service я отправляю широковещательную рассылку:

Intent intent = new Intent("my.service.action");
intent.setPackage("com.my.project.test"); //only broadcast to my test project
getApplicationContext().sendBroadcast(intent);
Log.i("tag","broadcast is sent!");

В моем тестовом проекте AndroidTestCase я запускаю и связываю Service, который также запускает широковещательную рассылку. Итак, я решил получать эту трансляцию еще и в свой AndroidTestCase:

public class MyTestCase extends AndroidTestCase{ 
  ...
  @Override
  public void setUp() throws Exception{
    super.setUp();
     //This is working fine, I can see the broadcast is sent log in service
     bindToService() 

     //register broadcast receiver 
     IntentFilter filter = new IntentFilter("my.service.action");
     getContext().registerReceiver(mMyReceiver, filter);
  }

  public BroadcastReceiver mMyReceiver = new BroadcastReceiver(){

      @Override
      public void onReceive(Context context, Intent intent) {
      //BUT the broadcast sent in service is not received in my test case, why?
      Log.i(TAG, "Received in test case!");

     }  
 };
}

Как видите, я зарегистрировал широковещательный приемник в своем AndroidTestCase тестовом проекте. Хоть трансляция и была отправлена ​​в Service моего проекта, но не получена. Почему?

==========ОБНОВЛЕНИЕ============

После того, как я удалил эту строку: intent.setPackage("com.my.project.test") при отправке трансляции, мой приемник в классе AndroidTestCase теперь получает трансляцию.

Но теперь мне интересно, почему явно установленный пакет для намерения блокирует получателя в тестовом проекте, хотя имя пакета, которое я установил, является моим тестовым проектом. В AndroidManifest.xml моего тестового проекта у меня есть определение имени пакета:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.project.test"
   ...

person Leem.fin    schedule 18.10.2013    source источник
comment
AndroidTestCase это Service, Activity или как?   -  person Kristopher    schedule 18.10.2013
comment
Это общий класс тестовых случаев в среде тестирования Android: developer.android.com/ ссылка/андроид/тест/ . Служба, которую я упомянул, находится в моем проекте, а не в тестовом проекте.   -  person Mellon    schedule 18.10.2013


Ответы (1)


@Override
  public void setUp() throws Exception{
    super.setUp();
     //This is working fine, I can see the broadcast is sent log in service
     bindToService() 

     //register broadcast receiver 
     IntentFilter filter = new IntentFilter("my.service.action");
     getContext().registerReceiver(mMyReceiver, filter);
  }

Изменить на:

@Override
  public void setUp() throws Exception{
    super.setUp();

     //register broadcast receiver 
     IntentFilter filter = new IntentFilter("my.service.action");
     getContext().registerReceiver(mMyReceiver, filter);

   //This is working fine, I can see the broadcast is sent log in service
     bindToService();

  }

Взгляните на этот ответ. Надеюсь, он вам поможет. !!

person Bhoomika Brahmbhatt    schedule 18.10.2013
comment
На самом деле, это не из-за порядка в коде, у меня есть намерение.setPackage(com.my.project.test), после того, как я удалил эту строку, она работает нормально, мой приемник в классе AndroidTestCase теперь принимает трансляцию. Но теперь мне интересно, почему явно установленный пакет для намерения блокирует получателя... - person Mellon; 18.10.2013