私はMac上で動作しており、Windows上で動作するはずです。
異なるファイルタイプのためにあなたを登録すると、あなたがアイコンにファイルをドロップすることができ、アプリケーションが開き、あなたはそれのためのイベントリスナー(問題1解決)を追加した後、invokeイベントが送出されます。ファイルタイプを登録すると、MacとWindowsの両方で「Open with ...」を使用することもできます(問題2が解決されました)。
あなたの呼び出し機能は、あなたの実行/デバッグ起動引数(ボーナスポイント)内のファイルへのパスを追加することができます動作するかどうかをテストするためのFlash Builderまたは別のIDEを使用している場合。その周りに引用符を入れ、スペースで区切って追加の引数を追加します。
あなたは、アプリケーションにイベントリスナーを追加する必要がありますし、その後、あらゆる呼び出すが派遣されます。それまではキューに入れるだけです。
Macのアプリケーションアイコンに複数のファイルをドロップすると、複数の引数を持つ単一の起動イベントが発生します。 WindowsとLinuxでは、このイベントは単一の引数で複数回送出されます。各引数はファイルへのフルパスです。あなたは、通常のアプリケーションを開いて、どのファイルがアプリケーションにドロップしなかった場合でも、それが送出されたinvokeイベントをリッスン場合
。これは標準の呼び出しタイプであり、引数はありません。
以下の例は、invokeイベントをリッスンし、さまざまなケースを処理します。
<?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"
invoke="windowedapplication1_invokeHandler(event)"
>
<fx:Script>
<![CDATA[
protected function windowedapplication1_invokeHandler(event:InvokeEvent):void {
var invokeArguments:Array = event.arguments;
var filePath:String;
var stream:FileStream;
var file:File;
var testing:Boolean = false;
// application icon had a file dropped on it or an associated file was double clicked while app was open
if (event.reason == InvokeEventReason.STANDARD && invokeArguments.length) {
invokeWithFile(event.currentDirectory, invokeArguments);
}
// application opened normally
if (event.reason == InvokeEventReason.STANDARD &&
(invokeArguments.length == 0 || testing)) {
if (testing) {
invokeArguments = ["/Users/me/Desktop/test.jpg"];
}
invokeWithFile(event.currentDirectory, invokeArguments);
return;
}
// application opened at login
if (event.reason == InvokeEventReason.LOGIN) {
return;
}
// application opened from URL
if (event.reason == InvokeEventReason.OPEN_URL) {
return;
}
// application opened from notification such as iOS APN
if (event.reason == InvokeEventReason.NOTIFICATION) {
return;
}
}
public var invokedFile:File;
/**
* Invoked file.
* */
public function invokeWithFile(currentDirectory:File, invokedArguments:Array):void {
var filePath:String = invokedArguments && invokedArguments.length ? invokedArguments[0] : null;
var fileData:String;
var fileStream:FileStream;
var file:File;
if (filePath) {
try {
file = new File(filePath);
}
catch (errorEvent:*) {
trace("Error: " + errorEvent.toString());
return;
}
if (file &&
file.exists &&
file.isDirectory==false &&
file.extension &&
file.extension.toLowerCase()=="mxml") {
fileStream = new FileStream();
try {
fileStream.open(file, FileMode.READ);
if (fileStream.bytesAvailable) {
fileData = fileStream.readUTFBytes(fileStream.bytesAvailable);
}
}
catch (error:*) {
}
}
}
}
]]>
</fx:Script>
</s:WindowedApplication>
ここにアプリケーション記述ファイルがあります。ファイルタイプは厳密です。私はノートをインライン含めました:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/20.0">
<fileTypes>
<fileType>
<!-- name cannot contain a space -->
<name>MXML.File</name>
<!-- extension cannot be * -->
<extension>mxml</extension>
<description>MXML file</description>
<!-- content type is required -->
<contentType>text/plain</contentType>
</fileType>
<fileType>
<name>Photoshop.Image</name>
<extension>psd</extension>
<description>Adobe Photoshop Image</description>
<contentType>application/octet-stream</contentType>
</fileType>
<fileType>
<name>JPEG.Image</name>
<extension>jpg</extension>
<description>JPEG Image</description>
<contentType>image/jpeg</contentType>
</fileType>
<fileType>
<name>JPEG.Image</name>
<extension>jpeg</extension>
<description>JPEG Image</description>
<contentType>image/jpeg</contentType>
</fileType>
<fileType>
<name>PNG.Image</name>
<extension>png</extension>
<description>PNG Image</description>
<contentType>image/png</contentType>
</fileType>
<fileType>
<name>GIF.Image</name>
<extension>gif</extension>
<description>GIF Image</description>
<contentType>image/gif</contentType>
</fileType>
</fileTypes>
</application>
ファイルタイプのエラー:
エラー104:application.fileTypes.fileType.contentTypeが必要です。 解決方法:コンテンツタイプを含める必要があります。オンラインで言及された他の場所はオプションでしたが、今必要になるかもしれません。
エラー104:application.fileTypes.fileType.extensionが必要です。 解決方法:拡張機能を含める必要があります。
エラー105:application.fileTypes.fileType.extensionに無効な値が含まれています。 解決方法:内線を空にすることはできません。
エラー105:application.fileTypes.fileType.nameに無効な値が含まれています。 解決方法:名前にはスペース文字を使用できません。
Windowsについてあなたが答える可能性のある人は、Macを持っていないとします。このドロップをするとどうなりますか? Windowsの** "Open With ..." **オプションに似ていますか? 「...ファイルを取得...」とはどういう意味ですか、「picture.jpg」ファイルをPhotoshopアイコンにドラッグした場合と同じように、AIRアプリケーションと何が関係しているのか、この例に入りたいのですか? –
はい。それと同じように。 Windowsでのopenと同じで、Photoshopに画像をドラッグするのと同じです。私は画像へのファイル参照またはパスを取得したい。それは主にアプリのアイコンにドラッグアンドドロップすることです。 –
あなたのアプリが開くことができるファイルタイプを登録し、次に呼び出すイベント –