В моем проекте при запуске 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"
...
AndroidTestCase
этоService
,Activity
или как? - person Kristopher   schedule 18.10.2013