我使用预览M并测试我的应用程序,特别是"将文件保存到外部存储"部分.在下载/保存过程开始之前,我请求
Manifest.permission.WRITE_EXTERNAL_STORAGE
Run Code Online (Sandbox Code Playgroud)
开发者页面上描述的权限:https://developer.android.com/preview/features/runtime-permissions.html
对话框按预期发生:
"Allow <AppName> to access photos, media, and files on your device?" Deny / Allow
Run Code Online (Sandbox Code Playgroud)
如果我点击"拒绝"按钮,则调用活动的onRequestPermissionsResult方法.
如果我按下"允许"按钮,则首先重新创建活动,然后调用onRequestPermissionsResult方法.我认为这是获得许可的结果.
但第二种情况很棘手,因为我想触发一个开始下载的回调,但此时此对象为null:
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
getLogger().error("onRequestPermissionsResult ( " + requestCode + ", " + permissions + ", " + grantResults + " )");
switch (requestCode) {
//permission for saving files?
case PermissionCode.WRITE_EXTERNAL_STORAGE: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//HERE IS THE NULL-OBJECT
if (controller != null) {
controller.triggerCallback();
}
}
break;
} …Run Code Online (Sandbox Code Playgroud) 启用/禁用来自Settings-> apps-> my app-> Permissions的权限后,应用程序将重新启动.Adb可以看到与权限相关的应用操作已更改...,
08-31 14:30:29.480 I/ActivityManager( 8206): Displayed com.google.android.packageinstaller/com.android.packageinstaller.permission.ui.ManagePermissionsActivity: +392ms
08-31 14:30:29.496 D/OpenGLRenderer(15990): endAllStagingAnimators on 0x9a60bd80 (ListView) with handle 0x97d4c1f0
08-31 14:30:30.477 D/audio_hw_primary( 7972): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
08-31 14:30:30.522 D/AudioFlinger( 7972): mixer(0xb3ec0000) throttle end: throttle time(5)
08-31 14:30:31.298 I/ActivityManager( 8206): Killing 28808:com.sample.ui/u0a109 (adj 2): Permission related app op changed
Run Code Online (Sandbox Code Playgroud) 我知道,使用Android Marshmallow,每次我们需要一个需要权限的功能时,我们都必须询问权限.
我为新的应用程序执行此操作,但对于旧的BIG应用程序更复杂.
对于旧的BIG App,我要求"MainActivity"中的所有权限.
所以,我的应用程序启动并显示一个Map Fragment.我没有问题请求位置许可.用户同意.
用户将其置于后台,进入应用程序设置并拒绝权限.然后他把应用程序放在前台:应用程序崩溃!!
我知道,使用Map Fragment时出现问题.
但该应用程序太大,无法分析每一个权限.
我需要快速解决方案:允许更改--->重启APP!
这就是GoogleMaps的作用!
我创建了GoogleMaps,并将其置于后台.
GoogleMaps App权限,第一个区别:
在我的应用程序中,如果我拒绝了许可,我没有显示Google地图的此消息:
之后,如果我将GoogleMaps放在前台,应用程序重新启动没有问题:
我的应用需要这个.有人能帮我吗?!?!?!?
非常感谢!!
我开发了一个应用程序并支持Android 6.0。当我在“设置”->“应用程序”->“重置应用程序首选项”中重置应用程序首选项时,我的应用程序的所有权限都被吊销,并且该应用程序未重新启动。撤消其权限后无法重新启动该应用程序可能会导致许多意外崩溃。
我应该如何处理这种情况?
当我手动撤消其权限(设置->应用程序->我的应用程序->权限)时,该应用程序将重新启动。
permissions android android-permissions android-6.0-marshmallow
有什么意义
android.os.Debug.waitForDebugger();
Run Code Online (Sandbox Code Playgroud)
我知道我们 [有时] 需要使用此函数来调试 a Service,但我的问题是:
Service必须以这种方式调试,而不是 an Activityor BroadcastReceiver?有人会认为在项目中调试任何类型的代码都很简单。除了它不是。Service反正不是为了。
这个特殊程序存在的原因是什么?它还有什么用途?
等待调试器连接。一旦调试器附加,它就会返回,所以如果你想立即开始跟踪,你需要在 waitForDebugger() 调用之后放置一个断点。
该为什么仍然没有答案。
更新:
我发现了此功能的一个用例:当应用程序进程终止后自动重启 Android 应用程序时。当用户在应用程序设置中切换运行时权限时,该进程将被终止。更一般地说,一个应用程序进程被杀死并重新启动,只要...
android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)
叫做。
要在进程重新启动后调试应用程序,请编写android.os.Debug.waitForDebugger()代码,然后将调试器附加到当前进程。
这是此功能的一个用例。
参考资料:
调试服务。
可能相关:
android android-service android-testing android-debug android-developer-api