Get VideoGallery

ºñµð¿À °¶·¯¸®¸¦ ¾ò¾î¿À´Â Ç÷¯±×ÀÎÀ» ¸¸µé¾î º»´Ù.
Äڵ忡 ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº »ý·«ÇÑ´Ù.

À¯´ÏƼ¿Í ÀÎÅÍÆäÀ̽º¿¡ ´ëÇؼ­¸¸ ÀÚ¼¼ÇÏ°Ô ¼³¸í ÇÑ´Ù.

ÀÚ¹Ù¿¡¼­ 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/