FC2ブログ
    08 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【Unity】iOSのカメラロールへのアクセス 

    こんにちは。
    大坂です。

    今週も小ネタ。
    iOSのカメラロールへのアクセスについてです。

    まずは、こんな感じで「.mm」ファイルを作成します。
    #import <Foundation/Foundation.h>
    #import <AssetsLibrary/AssetsLibrary.h>
    #import <AVFoundation/AVFoundation.h>

    /*
    指定したパスの画像をカメラロールに保存するのに利用するネイティブコード。
    */
    // 指定したパスの画像をカメラロールに保存する。
    extern "C" void _ImageToAlbum (const char* path)
    {
    UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]];
    ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
    NSMutableDictionary *metadata = [[[NSMutableDictionary alloc] init] autorelease];
    [library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) {
    // 書き込み終了後、Unity側へコールバック。
    UnitySendMessage("{呼び出すオブジェクト名}", "{呼び出すメソッド名}", [error.description UTF8String]);
    }];
    }
    作成した「.mm」はUnityの「Plugins/iOS」に突っ込んでおきましょう。

    次に呼び出す側です。使う部分だけですが…。
    #if UNITY_IPHONE
    // クラスの最初でインポート
    [DllImport("__Internal")]
    private static extern void _ImageToAlbum (string path);
    #endif

    public void CopyImage() {
    #if UNITY_IPHONE
    // 呼び出し部分
    _ImageToAlbum ({ファイルパス});
    #endif
    }

    // コールバック用のメソッド
    void CallbackImageToAlbum (string error) {
    // 処理
    }
    基本これだけで行けますね。
    アプリで呼び出すメソッドを実行したら「カメラロールへのアクセス」のポップアップが表示されるので、許可すればカメラロールに指定したパスのファイルが保存されているはずです!

    「.mm」で「AssetsLibrary」を使用しているのでXcodeとかでフレームワークの追加をお忘れなく!

    ではこれにて。

    Category: 開発日記(Unity)

    tb 0 : cm 0