안녕하세요
현재 게임엔진에서 안드로이드 프로젝트의 jar파일을
라이브러리 형태로 불러와 해당 jar파일 내부에 잇는
service 클래스를 startService() 하고
해당 service는 onCreate 되자마자
googleApiclient.build()를 실행하고
onConnected() 가 호출 되자마자
같이 페어링된 Wear 에 sendMessage를 보냅니다. ( 테스트를 위해 연결되자마자 메시지를 하나 보내게
해놓음)
이때 onconnected() 호출 될시의 보낸 sendmessage는 정상적으로 보내지고
해당 wear에서도 메시지를 받고 로그가 찍히는대
이상하게 실제 엔진에서 원하는 부분에서 좀전에 생성한 service 클래스로 함수를 호출하고
Sendmessage를 보낼라고 하면 oncreate에서 생성한 googleapiclient가 Null이 되어서
자꾸 터지네요...
물론 service 가 꺼지면 로그가 찍히게 onDestroy 에 로그를 찍어 놓았는대 해당 로그는 찍힌적이 없고요
아래 코드가 service 클래스의 코드부분입니다
public class WatchService extends Service implements
MessageApi.MessageListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
NodeApi.NodeListener,
DataApi.DataListener
{
GoogleApiClient googleClient;
private static final String TAG = "[MyLog_WatchService]";
private static final String START_ACTIVITY_PATH = "/wearable_data";
public final int STATE_WAITTING = 0;
public final int STATE_BATTLE_ING = 1;
public final int STATE_BATTLE_CLEAR = 2;
public final int STATE_BATTLE_FAIL = 3;
public final int STATE_NOT_ENOUGH_KEY = 4;
public final String EVENT_RETRY = "requst_retry";
public final String EVENT_NEXT = "request_next_dungeon_enter";
public final String EVENT_BEFORE = "request_before_dungeon_enter";
public ArrayList<String> eventdata = new ArrayList<String>();
@Override
public void onCreate() {
Log.v(TAG, "WatchService ServiceCall onCreate");
super.onCreate();
googleClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
//OnWakeUp_Wear();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.v(TAG, "WatchService ServiceCall onStartCommand" );
googleClient.connect();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onConnected(Bundle bundle)
{
Log.v(TAG, "WatchService onConnected");
Wearable.DataApi.addListener(googleClient, this);
Wearable.MessageApi.addListener(googleClient, this);
Wearable.NodeApi.addListener(googleClient, this);
sendDataLayerMessage("Onconnected Test Msg");
}
그리고 엔진 부분에서 호출되는 함수입니다 같은 service 클래스 내부에 존재합니다
public void SendToAndorid_Waitting(int state)
{
Log.v(TAG, "WatchService SendToAndroid_Waitting_From_Unreal:" + state);
DataMap data = new DataMap();
data.putInt("state", state);
if( googleClient == null)
{
Log.v(TAG, "GoogleClient Null...");
Log.v(TAG, "GoogleClient Re Build...");
googleClient = new GoogleApiClient.Builder(this)
.addApi(Wearable.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
Log.v(TAG, "GoogleClient Re Connect Try");
googleClient.connect();
eventdata.add("Waiting");
}
else
{
Log.v(TAG, "GoogleClient Connect Check");
if(!googleClient.isConnected() || !googleClient.isConnecting())
{
Log.v(TAG, "Connected Break");
Log.v(TAG, "Reconnect Try");
googleClient.connect();
eventdata.add("Waiting");
}
}
sendDataLayerMessage("Waiting");
//new SendToDataLayerThread(START_ACTIVITY_PATH, data ).start();
}
제가 에러가 나는 부분을 간단히 다시 정리하면
1> 게임 프로젝트가 실행되며 startservice()로 jar파일내의 service class 호출
2> service class onCreate()호출시 googleapiclient.build() 를 실행
3> service class onstartcommand() 호출시 googleapilcinet.connect() 실행
4> service class onconnected() 호출 테스트로 sendmessage() 실행
5> 해당 메시지에 대한 로그도 잘찍히며 페어링된 wear에서도 메시지를 받은 로그 확인
6> 실제 직접사용할 엔진에서 안드로이드로 함수 호출(JNI 이용)
7> 호출된 안드로이드 함수 호출 로그 확인 sendmessage
아래 로그 출력
11-04 11:12:30.646: V/[MyLog_WatchService](605): WatchService SendToAndroid_Waitting_From_Unreal:0
11-04 11:12:30.646: V/[MyLog_WatchService](605): GoogleClient Null...
11-04 11:12:30.646: V/[MyLog_WatchService](605): GoogleClient Re Build...
11-04 11:12:30.647: W/System.err(605): java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Looper android.content.Context.getMainLooper()' on a null object reference
11-04 11:12:30.647: W/System.err(605): at android.content.ContextWrapper.getMainLooper(ContextWrapper.java:102)
11-04 11:12:30.647: W/System.err(605): at com.google.android.gms.common.api.GoogleApiClient$Builder.<init>(Unknown Source)
11-04 11:12:30.647: W/System.err(605): at com.example.g9kim.wearproject.WatchService.SendToAndorid_Waitting(WatchService.java:283)
service 라는게 원래 이렇게 생성한 객체가 일정시간이 지나면 날라가 버리나요,,?
아니면 jar파일 내부에 잇는 service 라서 그런건가요?
이해가 잘안되네요 왜 이런건지
도움 부탁드려요~