아래와 같이 단일 클래스로 구현하고 메니페스트 등록 후 돌려보면
sendBroadcast(); 해주면 리시버가 응답을 합니다. 로그도 찍히구요.
<<BroadcastReceiver.java>>
public class BroadcastReceiver extends BroadcastReceiver{
....
@Override
public void onReceive(Context context, Intent intent) {
Log.i("broad", "in");
// 인텐트에서 생명체의 세부 정보를 얻어온다
.....
}
}
헌데 아래처럼 ActivityGroup 클래스 안에 BroadcastReceiver를 상속받은 이너클래스로 구현시
메니페스트에 등록을 해도 응답을 안 합니다...매니페스트 등록이 잘 안된건지..
아니면 이런방식으론 원래 안 되는 것인지 모르겠습니다...
<<TabHostActivity.java>>
public class TabHostActivity extends ActivityGroup {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("TabHost", "in");
....
}
public class BroadReceiver extends BroadcastReceiver{
....
@Override
public void onReceive(Context context, Intent intent) {
Log.i("broad", "in");
....
}
}
}
제가 꼭 엑티비티그룹 안에 리시버를 구현해야하는 이유는....리시버에서 받은 인텐트를 바로
activityManager = getLocalActivityManager();
window = activityManager.startActivity("test",addIntent);
setContentView(window.getDecorView());
를 이용해서 현재 탭의 내용 부분에 엑티비티를 추가해 줘야 하기 때문입니다 ;;;
만약 위 방법ㅇ ㅣ잘못됐다면... <<BroadcastReceiver.java>>처럼 따로 구현한 리시버에서
탭호스트에 접근해 현재 탭의 엑티비티를 다른 액티비티로 교체할 수 있게 접근할 수 있는 방법이라던가...
아니면 리시버에서 접근은 하지않으면서 엑티비티그룹으로 인텐트를 보내주어 엑티비티그룹 쪽에서 그걸
받아서 어떻게 처리할 수 있는 방법이 있나...이런 방법이 가능할까요...?
위에 제가 하려는 방법이 가장 맞는거 같은데....이해가 안가네요 ㅠㅠ
메니페스트 등록은 이렇게 하였습니다.
<activity android:name=".TabHostActivity" android:label="@string/app_name">
<receiver android:name=".BroadReceiver">
<intent-filter>
<action android:name="com.paad.action.Sub_View" />
</intent-filter>
</receiver>
</activity>
=================================================================
아래와 같이 따로 구현하면 BroadReceiver가 non-static 이라면서 안됩니다....
<activity android:name=".TabHostActivity" android:label="@string/app_name">
</activity>
<receiver android:name=".TabHostActivity.BroadReceiver">
<intent-filter>
<action android:name="com.paad.action.Sub_View" />
</intent-filter>
</receiver>
그래서 static 클래스로 바꿔주면....
아래소스 부분의 getLocalActivityManager라던가 setContentView에 접근이 안됩니다....
activityManager = getLocalActivityManager();
window = activityManager.startActivity("test",addIntent);
setContentView(window.getDecorView());
=================================================================
미치겠습니다 ㅠㅠㅠㅠㅠㅠㅠㅠ
답변 감사합니다 매니패스트가 아닌 java 코드에서 붙였다 뗐다 구현하였습니다.
헌데 getLocalActivityManager()를 이용해서 setContentView(window.getDecorView()); 해주면
탭바는 남아있고 컨텐츠 부분만 새로운 엑티비티가 들어가는걸로 알고 했는데....
화면 전체(탭바 포함)가 다음 엑티비티로 넘어가 버리는데...제가 뭘 잘못한건지 모르겠습니다...ㅠ
지금 구조는 질문글에 올린것과 마찬가지로 엑티비티그룹 클래스 안에 브로드캐스트리시버를 구현하였고 그 안에서
unregisterReceiver(rcv);
LocalActivityManager activityManager = getLocalActivityManager();
Window window = activityManager.startActivity("test",addIntent);
setContentView(window.getDecorView());
tabHost.setCurrentTab(type);
해 주었습니다. ㅠ_ㅠ
mContext.registerReceiver(BroadReceiver 클래스 인스턴스변수명, new IntentFilter(받고자 하는 인텐트 명));
종료시
mContext.unregisterReceiver(BroadReceiver 클래스 인스턴스변수명);
이런식입니다.