捕获权限授予完成事件
capture permission granted complete event
我正在使用 flash cc 创建一个应用程序。我需要存储许可。原来我需要询问用户使用存储设备的权限。我可以向用户征求许可并且它工作正常。我使用这个网站的例子:https://helpx.adobe.com/flash-player/release-note/fp_24_air_24_release_notes.html
但我的问题是我无法捕获访问存储权限的完整事件。因此,在我访问存储后我无法 运行 代码。是否可以捕获完整事件以授予任何权限?
我使用的代码:
var file:File = File.documentsDirectory.resolvePath("somefile.txt");
trace("url_txt:" + file.url);
file.addEventListener(PermissionEvent.PERMISSION_STATUS, function permissionStatusHandler(e:PermissionEvent):void
{
file.removeEventListener(PermissionEvent.PERMISSION_STATUS, permissionStatusHandler);
if(e.status == PermissionStatus.GRANTED)
{
myTextLoader.load(new URLRequest(file.url));
myTextLoader.addEventListener(Event.COMPLETE, onLoadTextComp);
myTextLoader.addEventListener(IOErrorEvent.IO_ERROR, loadingTextError);
}
else
{
showPermissionError();
}
}
);
try
{
trace("Requesting permission");
file.requestPermission();
}
catch(error:Error)
{
trace("Request permission error");
}
更新:
上面的代码似乎工作正常。但是当我试图在不同的时间两次请求相同的权限时,问题就出现了。我还有一个问题。我们可以在请求许可时添加描述吗?许多应用程序似乎都在添加说明为什么该应用程序需要该特定权限。是否有可能从 Flash as3 实现这一点?我查看了网络但找不到任何东西。以及如何请求 READ_PHONE_STATE
的权限?
我终于明白了。先决条件:
- AIR 运行时 24+
- Android6+
- APK 必须在获得 WRITE_EXTERNAL_STORAGE 许可的情况下发布(否则它会自动 DENIED - 这就是我遇到的问题)
然后,这段代码对我来说工作得很好,它显示 Android 的 "Grant Permission" 对话框,然后根据我的选择输出 GRANTED 或 DENIED。 Log class 只是我自己的调试面板,你可以将 Log.log 调用更改为 trace 或在此处获取它(它没有依赖项):https://bitbucket.org/thydmitry/ru.delimiter/src/9083fb46ce1c/classes/ru/delimiter/utils/
package
{
import ru.delimiter.utils.Log;
import flash.filesystem.File;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.PermissionEvent;
import flash.permissions.PermissionStatus;
public class Permissions extends Sprite
{
private var F:File;
public function Permissions()
{
if (stage) onStage();
else addEventListener(Event.ADDED_TO_STAGE, onStage);
}
private function onStage(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, onStage);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
Log.create(this, true);
Log.log("[Permissions Test] started");
Log.log("File.permissionStatus:", File.permissionStatus);
F = File.applicationStorageDirectory.resolvePath("somefile.txt");
F.addEventListener(PermissionEvent.PERMISSION_STATUS, onPerm);
stage.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:MouseEvent):void
{
F.requestPermission();
}
private function onPerm(e:PermissionEvent):void
{
Log.log("User's decision:", e.status.toUpperCase());
}
}
}
我正在使用 flash cc 创建一个应用程序。我需要存储许可。原来我需要询问用户使用存储设备的权限。我可以向用户征求许可并且它工作正常。我使用这个网站的例子:https://helpx.adobe.com/flash-player/release-note/fp_24_air_24_release_notes.html
但我的问题是我无法捕获访问存储权限的完整事件。因此,在我访问存储后我无法 运行 代码。是否可以捕获完整事件以授予任何权限?
我使用的代码:
var file:File = File.documentsDirectory.resolvePath("somefile.txt");
trace("url_txt:" + file.url);
file.addEventListener(PermissionEvent.PERMISSION_STATUS, function permissionStatusHandler(e:PermissionEvent):void
{
file.removeEventListener(PermissionEvent.PERMISSION_STATUS, permissionStatusHandler);
if(e.status == PermissionStatus.GRANTED)
{
myTextLoader.load(new URLRequest(file.url));
myTextLoader.addEventListener(Event.COMPLETE, onLoadTextComp);
myTextLoader.addEventListener(IOErrorEvent.IO_ERROR, loadingTextError);
}
else
{
showPermissionError();
}
}
);
try
{
trace("Requesting permission");
file.requestPermission();
}
catch(error:Error)
{
trace("Request permission error");
}
更新:
上面的代码似乎工作正常。但是当我试图在不同的时间两次请求相同的权限时,问题就出现了。我还有一个问题。我们可以在请求许可时添加描述吗?许多应用程序似乎都在添加说明为什么该应用程序需要该特定权限。是否有可能从 Flash as3 实现这一点?我查看了网络但找不到任何东西。以及如何请求 READ_PHONE_STATE
的权限?
我终于明白了。先决条件:
- AIR 运行时 24+
- Android6+
- APK 必须在获得 WRITE_EXTERNAL_STORAGE 许可的情况下发布(否则它会自动 DENIED - 这就是我遇到的问题)
然后,这段代码对我来说工作得很好,它显示 Android 的 "Grant Permission" 对话框,然后根据我的选择输出 GRANTED 或 DENIED。 Log class 只是我自己的调试面板,你可以将 Log.log 调用更改为 trace 或在此处获取它(它没有依赖项):https://bitbucket.org/thydmitry/ru.delimiter/src/9083fb46ce1c/classes/ru/delimiter/utils/
package
{
import ru.delimiter.utils.Log;
import flash.filesystem.File;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.PermissionEvent;
import flash.permissions.PermissionStatus;
public class Permissions extends Sprite
{
private var F:File;
public function Permissions()
{
if (stage) onStage();
else addEventListener(Event.ADDED_TO_STAGE, onStage);
}
private function onStage(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, onStage);
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
Log.create(this, true);
Log.log("[Permissions Test] started");
Log.log("File.permissionStatus:", File.permissionStatus);
F = File.applicationStorageDirectory.resolvePath("somefile.txt");
F.addEventListener(PermissionEvent.PERMISSION_STATUS, onPerm);
stage.addEventListener(MouseEvent.CLICK, onClick);
}
private function onClick(e:MouseEvent):void
{
F.requestPermission();
}
private function onPerm(e:PermissionEvent):void
{
Log.log("User's decision:", e.status.toUpperCase());
}
}
}