ºñµð¿À °¶·¯¸®¸¦ ¾ò¾î¿À´Â Ç÷¯±×ÀÎÀ» ¸¸µé¾î º»´Ù.
Äڵ忡 ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«ÇÑ´Ù.
À¯´ÏƼ¿Í ÀÎÅÍÆäÀ̽º¿¡ ´ëÇؼ¸¸ ÀÚ¼¼ÇÏ°Ô ¼³¸í ÇÑ´Ù.
ÀÚ¹Ù¿¡¼ UnityPlayer¸¦ »ó¼ÓÇϰųª ÀÓÆ÷Æ® ÇÏÁö ¾Ê°í Äڵ带 ÀÛ¼ºÇÏ¿´´Ù.
±×·¸±â ¶§¹®¿¡ À¯´ÏƼ¿¡¼ ¾Èµå·ÎÀ̵å ÀÚ¹Ù ÄÚµå·Î Activity¸¦ ³Ñ°Ü ÁÖ¾î¾ß ÇÑ´Ù.
¾Èµå·ÎÀ̵å Ç÷¯±×ÀÎ ¼Ò½º
MainActivity.java ¼Ò½º
package mymy.com.androidplugin;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Plugin.java ¼Ò½º
package mymy.com.androidplugin;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.provider.MediaStore;
import java.util.ArrayList;
class VideoViewInfo
{
String filePath;
String mimeType;
String thumbPath;
String title;
}
public class Plugin extends Object {
public static String[] GetMovieList(Activity activity) {
ContentResolver contentProvider = activity.getContentResolver();
String[] thumbColumns = {
MediaStore.Video.Thumbnails.DATA,
MediaStore.Video.Thumbnails.VIDEO_ID
};
String[] mediaColumns = {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.MIME_TYPE
};
ArrayList<VideoViewInfo> videoRows = new ArrayList<VideoViewInfo>();
Cursor cursor =
contentProvider.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
mediaColumns, null, null, null);
if (cursor.moveToFirst()) {
do {
VideoViewInfo newVVI = new VideoViewInfo();
int id =
cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID));
//Cursor thumbCursor = managedQuery(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
// thumbColumns,
MediaStore.Video.Thumbnails.VIDEO_ID + "=" + id, null, null);
Cursor thumbCursor =
contentProvider.query(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID + "=" + id, null,
null);
if (thumbCursor.moveToFirst()) {
newVVI.thumbPath = thumbCursor.getString(
thumbCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA));
//Log.v("VideoGallery","Thumb " + newVVI.thumbPath);
}
newVVI.filePath =
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
newVVI.title =
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
//Log.v("VideoGallery","Title " + newVVI.title);
newVVI.mimeType =
cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));
//Log.v("VideoGallery","Mime " + newVVI.mimeType);
videoRows.add(newVVI);
}
while (cursor.moveToNext());
String[] listStr = new String[videoRows.size() * 2];
for (int i = 0; i < videoRows.size(); i++) {
listStr[i * 2] = videoRows.get(i).filePath;
listStr[i * 2 + 1] = videoRows.get(i).thumbPath;
}
return listStr;
}
return null;
}
}
À¯´ÏƼ ¼Ò½º
AndroidPlugin.cs
using UnityEngine;
using UnityEngine.UI;
public class AndroidPlugin : MonoBehaviour {
public Text msgView;
// Use this for initialization
void Start () {
GetMovieList();
}
public void GetMovieList()
{
AndroidJavaClass unityPlayer
= new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject
unityActivity =
unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass plugin = new AndroidJavaClass("mymy.com.androidplugin.Plugin");
string [] fileList =
plugin.CallStatic< string[]>("GetMovieList", unityActivity);
string str = string.Empty;
for (int n = 0; n < fileList.Length; n++)
{
str += ", ";
str += fileList[n];
Debug.Log("<<< MovieList : " + fileList[n]);
}
msgView.text = str;
}
}
À¯´ÏƼ Manifest
AndroidManifest.xml ¼Ò½º
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mymy.com.go"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="9" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="@string/app_name">
<activity
android:name="com.unity3d.player.UnityPlayerProxyActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
</activity>
<activity
android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<meta-data android:name="android.app.lib_name" android:value="unity" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
<activity
android:name="com.unity3d.player.VideoPlayer"
android:label="@string/app_name" android:screenOrientation="behind"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
</activity>
</application>
</manifest>
À¯´ÏƼ ¾Èµå·ÎÀ̵å Manifest ÆÄÀÏÀº Assets/Plugins/Android Æú´õ¿¡ ÀÖ´Ù.
¸Å´ÏÆ佺Ʈ ÆÄÀÏ¿¡ ÀúÀå ÀåÄ¡ Àбâ Æ۹̼ÇÀ» Ãß°¡ÇÏÁö ¾ÊÀ¸¸é ÀúÀå ÀåÄ¡ Àб⠰ü·Ã ÆÛ¹Ì¼Ç ¿¡·¯°¡ ³¯°ÍÀÌ´Ù.
±×·¡¼ ¸Å´ÏÆ佺Ʈ ÆÄÀÏ¿¡ ´ÙÀ½ ¶óÀÎÀ» Ãß°¡ ÇØÁÖ¾î¾ß ÇÑ´Ù.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
¼Ò½º ¼³¸í
public static String[] GetMovieList(Activity activity)¿¡¼ ÀÔ·Â ÆĶó¸ÞÅÍ¿Í ¸®ÅÏ°ª¿¡ ´ëÇؼ ¾Ë¾Æº¸ÀÚ.
À¯´ÏƼ´Â ¾Èµå·ÎÀ̵å·Î activity¸¦ ¾î¶»°Ô ³Ñ°Ü ÁÙ°ÅÀΰ¡?
À¯´ÏƼ ½ºÅ©¸³Æ®¿¡¼´Â ´ÙÀ½°ú °°ÀÌ Acitivity¸¦ ¾ò¾î ¿Ã¼ö ÀÖ´Ù.
"com.unity3d.player.UnityPlayer"¸¦ ±¸Çϸé "currentActivity"·Î ÇöÀç ¾×ƼºñƼ¸¦ ¾ò¾î ¿Ã¼ö ÀÖ´Ù.
//AndroidPlugin.cs ¼Ò½ºÀϺÎ
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass plugin = new AndroidJavaClass("mymy.com.androidplugin.Plugin");
string [] fileList = plugin.CallStatic< string[]>("GetMovieList", unityActivity);
¹®ÀÚ ¹è¿Àº À¯´ÏƼ·Î ¾î¶»°Ô Àü´Þ ÇÒ °ÍÀΰ¡?
¾Èµå·ÎÀ̵忡¼ ³Ñ°ÜÁØ ¹®ÀÚ ¹è¿À» À¯´ÏƼ ½ºÅ©¸³Æ®¿¡¼ ±×´ë·Î »ç¿ëÇÏ¸é µÈ´Ù.
//AndroidPlugin.cs ¼Ò½ºÀϺÎ
string [] fileList = plugin.CallStatic< string[]>("GetMovieList", unityActivity);
< ¾Èµå·ÎÀÌµå ¼Ò½º >
MainActivity.java ¼Ò½º
Plugin.java ¼Ò½º
< À¯´ÏƼ ¼Ò½º >
AndroidPlugin.cs
AndroidManifest.xml ¼Ò½º
Âü°í)
Unity ½ºÅ©¸³Æ®¿¡¼ AndroidActivity È£Ãâ
http://stepism.sakura.ne.jp/unity/wiki/doku.php?id=wiki:unity:tips:088
Ç÷¯±×ÀÎÀ¸·Î ¹èÅ͸® ¿ë·® üũ
http://mizutanikirin.net/unity-native-code-pluginsandroidªÇ«Ð«Ã«Æ«êï×ÜÃö¢Ôð
À¯´ÏƼ¿¡¼ ¾Èµå·ÎÀÌµå °¶·¯¸® ¾ò¾î¿À±â
http://answers.unity3d.com/questions/537476/open-gallery-android.html
񃧯
http://tech.basicinc.jp/Unity/2013/11/25/unity_java_instance_method/
http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=25368
https://www.thepolyglotdeveloper.com/2014/06/creating-an-android-java-plugin-for-unity3d/
http://bluexmas.tistory.com/357
Äĸǵå ȯ°æÀ¸·Î Ç÷¯±×ÀÎ ºôµå
http://www.what-could-possibly-go-wrong.com/creating-a-native-android-plugin-for-unity3d/
|