API 19 и выше , Путь к файлу изображения из Uri работает отлично. Я также проверяю этот последний PIE API 28 .
public String getImageFilePath(Uri uri) {
String path = null, image_id = null;
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
image_id = cursor.getString(0);
image_id = image_id.substring(image_id.lastIndexOf(":") + 1);
cursor.close();
}
Cursor cursor = getContentResolver().query(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media._ID + " = ? ", new String[]{image_id}, null);
if (cursor!=null) {
cursor.moveToFirst();
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
}
return path;
}
Нет - невозможно. Лучшее, что вы можете сделать, - это автономное приложение (которое может быть создано во Flash или с помощью версии Flash Player для проектора, доступной на веб-сайте Adobe).
И зачем вам это нужно - Flash потрясающий, потому что Возможности графического интерфейса. Есть множество других языков программирования, которые намного лучше подходят для командной строки (Python или Ruby или, не дай бог, даже Perl)
По-видимому, существует проект Tamarin , целью которого является создание реализации AS3 с открытым исходным кодом. На этой странице дается небольшая информация о компиляции сценария AS3 и его запуске из командной строки.
Я не очень понимаю, насколько стабилен Tamarin, но это может быть ваш лучший выбор для сейчас. С другой стороны, я должен полностью согласиться с @zenazn в том, что вам было бы лучше долгое изучение языка, более предназначенного для общих целей, но если действительно хочет просто использовать ActionScript, не позволяйте кто-нибудь остановит вас :)
Вы можете взглянуть на Haxe , он очень похож на AS3 и может скомпилировать NekoVM байт-код, который может быть запущен из командной строки.
Также может быть интересен HippoHX , это своего рода фреймворк для создания настольных приложений из флеш-фильмов. (аналогично AIR, но с полным доступом к системе.)
В настоящее время невозможно сделать это с помощью чистого SWF.
Однако вы можете опубликовать свой Flash-контент как приложение AIR. Затем приложение может быть вызвано из командной строки, а аргументы можно будет получить из свойства arguments объекта InvokeEvent . Основная идея выглядит так:
NativeApplication.nativeApplication.addEventListener(
InvokeEvent.INVOKE, onInvoke );
// ...
function onInvoke( e:InvokeEvent ) {
var numArguments:int = e.arguments.length;
// ...
}
Однако обратите внимание, что это улица с односторонним движением. Вы можете получить аргументы командной строки, но Flash по-прежнему не понимает идеи stdin и stdout.
Вообще-то есть проект, который делает это возможным. RedTamarin - это проект, который расширяет AS3 (технически проект Tamarin, который является проектом Adobe / Mozilla ECMAScript), чтобы иметь доступ к библиотекам низкого уровня (например, POSIX). В своем текущем состоянии он, кажется, хорош для таких вещей, как программы, подобные сценариям оболочки, что похоже на то, что вы ищете.
Попробуйте:
Если вы действительно так склонны, вы можете открыть локальный сокет, а затем иметь вспомогательную программу, работающую из командной строки, для связи с открытым SWF.
Возможно, сейчас хорошее время для изучения другого языка. Могу я предложить Java?