littlepad blog

AIR アプリアイコンへのドロップでファイル情報取得

AIR アプリケーションのアイコン上(アプリ本体やショートカット)に、
ファイルをドラッグ&ドロップしてアプリを起動し、そのファイル情報(パス)を取得する。

main.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
            xmlns:s="library://ns.adobe.com/flex/spark"
            xmlns:mx="library://ns.adobe.com/flex/mx"
            applicationComplete="init(event)"
            >

    <fx:Script>
        <![CDATA[
            import flash.desktop.NativeApplication;
            import flash.events.InvokeEvent;
            import mx.events.FlexEvent;

            private function init(e:FlexEvent):void
            {
                NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);
            }

            private function onInvoke(e:InvokeEvent):void 
            {
                for each(var filePath:String in e.arguments)
                {
                    log.text += "\n" + filePath;
                }
            }
        ]]>
    </fx:Script>

    <s:Label id="log" width="100%" height="100%" text="[drop files]" />
</s:WindowedApplication>

ドロップを許容するファイルを限定する時は、application.xml でファイルタイプを指定する。
Windows だと全部受けつけてしまうけど、
Mac だと指定したファイルをドロップした時だけアプリが起動する。

application.xml

<?xml version="1.0" encoding="utf-8" ?>
<application xmlns="http://ns.adobe.com/air/application/3.1">

    <id>sample</id>
    <versionNumber>1.0</versionNumber>
    <filename>sample</filename>

    <name>sample</name>
    <description></description>
    <copyright></copyright>

    <initialWindow>
        <title>sample</title>
        <content>sample.swf</content>
        <systemChrome>standard</systemChrome>
        <transparent>false</transparent>
        <visible>true</visible>
        <minimizable>true</minimizable>
        <maximizable>true</maximizable>
        <resizable>true</resizable>
    </initialWindow>

    <fileTypes>
        <fileType>
        <name>jpg</name>
        <extension>jpg</extension>
        <contentType>image/jpg</contentType>
        </fileType>
    </fileTypes>

</application>
モバイルバージョンを終了