2019년 12월 20일 금요일

[Unity] Android Intent 사용 예제

타 앱에서 내 앱으로 공유기능을 사용하여 데이터를 전달하고 싶을 때


Unity 에서는 Android Native를 사용해야한다.


먼저 타 앱 공유 메뉴에 내 앱이 나오게 하려면 

AndroidManifest.xml 에 아래 부분이 포함되어야 한다.
<activity android:name="com.unity3d.player.UnityPlayerActivity" ..... >
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

위 내용은 공유 데이터 형식이 text 일때만 받겠다는 것.

자세한 건 공식 메뉴얼 ㄱㄱ

다음은 코드 부분
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");

string action = intent.Call<string>("getAction");
Debug.Log(action);
//android.intent.action.SEND

string extra = intent.Call<string>("getStringExtra", "android.intent.extra.TEXT");
Debug.Log(extra);
타 앱에서 공유를 받았을 때 "getAction" 값이 "android.intent.action.SEND" 이다.
그리고 텍스트데이터는 "getStringExtra" 함수와 "android.intent.extra.TEXT" 인수를 사용해야 한다.

처음엔 뭣 모르고 Intent에 getDataString() 함수가 있길래 

당연히 text 데이터면 이 함수인줄 착각하고 삽질함;;

"android.intent.extra.TEXT" 인수도 구글링으로 찾으며 삽질하다가

공식메뉴얼보고 알았다;; stackoverflow 보다 먼저 공식메뉴얼을 보는 습관을 길러야;;

Intent class