V系バンドマンがゲームを開発するんご

V系バンドマンの僕がゲームを開発してみるんご

【Android】【Unity】ギャラリーから画像を持ってきたい その2

さて前回の続きです。

前回はこちら。

vprog.hatenablog.com

今回は、開いたギャラリーから画像のパスを習得してみましょう。

マニュフェストファイルにパーミッションを追加します。

AndroidStudio
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sample.samplegame.lib">

    <application
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
        <activity android:name=".GalleryActivity">
            <intent-filter>
                <action android:name="androidnativeactions.Gallery" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
</manifest>

AndroidStudio
GalleryActivity.java

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(TAG, "onActivityResult: " + requestCode + " : " + resultCode);
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode != RESULT_OK)
        {
            setResult(resultCode);
            finish();
            return;
        }
        switch (requestCode)
        {
            case REQUEST_GALLERY_JELLYBEAN_BELOW:
                // 選択した画像のパスを取得する.
                String[] strColumns = {MediaStore.Images.Media.DATA };
                Cursor crsCursor = getContentResolver().query(data.getData(), strColumns, null, null, null);
                if(crsCursor.moveToFirst())
                {
                    Log.d(" PluginConnector", "REQUEST_GALLERY_JELLYBEAN_BELOW : " + crsCursor.getString(0));
                }
                crsCursor.close();
                break;

            case REQUEST_GALLERY_KITKAT_ABOVE:
                this.GetSelectedItemPath(data);
                break;
        }
        setResult(resultCode);
        finish();
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    private void GetSelectedItemPath(Intent data)
    {
        // 選択した画像のパスを取得する.
        String strDocId = DocumentsContract.getDocumentId(data.getData());
        String[] strSplittedDocId = strDocId.split(":");
        String strId = strSplittedDocId[strSplittedDocId.length - 1];

        Cursor crsCursor = getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                , new String[]{MediaStore.MediaColumns.DATA}
                , "_id=?"
                , new String[]{strId}
                , null);

        if (crsCursor.moveToFirst()) {
            Log.d("PluginConnector", "REQUEST_GALLERY_KITKAT_ABOVE : " + crsCursor.getString(0));
        }
        crsCursor.close();
    }

参考サイト
mslgt.hatenablog.com

実機で確認するとログに選択したパスが表示されました。

今回はここまでです。