我正在阅读关于Android M中新Permissions模型的官方文档.它讨论了如果应用程序先前已请求此权限并且用户拒绝该请求shouldShowRequestPermissionRationale()
,则返回的函数true
.如果用户过去拒绝了权限请求并选择了"不再询问"选项,则此方法返回false
.
但是我们如何区分以下两种情况呢?
案例1:该应用程序没有权限,之前未向用户询问过该权限.在这种情况下,shouldShowRequestPermissionRationale()将返回false,因为这是我们第一次询问用户.
情况2:用户已拒绝该权限并选择"不再询问",在这种情况下,shouldInShowRequestPermissionRationale()也将返回false.
我想将用户发送到案例2中的应用程序设置页面.我如何区分这两种情况?
我一直在尝试实现一个需要在表面上进行相机预览的应用程序.在我看到事物时,活动和表面生命周期都包含以下状态:
onResume()->onSurfaceCreated()->onSurfaceChanged()
onPause()->onSurfaceDestroyed()
在此方案中,我可以像打开/释放相机相应的调用和启动/停止在预览onPause/onResume
和onSurfaceCreated()/onSurfaceDestroyed()
.
它工作正常,除非我锁定屏幕.当我启动应用程序时,然后锁定屏幕并在以后解锁它我看到:
onPause()
- 屏幕锁定后没有别的 - 然后onResume()
解锁后 - 之后没有表面回调.实际上,onResume()
在按下电源按钮并且屏幕打开后调用,但是锁定屏幕仍然处于活动状态,因此,在活动变得均匀可见之前.
通过这种方案,我在解锁后得到一个黑屏,并且没有调用表面回调.
这是一个代码片段,不涉及相机的实际工作,而是SurfaceHolder
回调.即使在我的手机上使用此代码,也会重现上述问题(按"后退"按钮时会以正常顺序调用回调,但在锁定屏幕时会丢失):
class Preview extends SurfaceView implements SurfaceHolder.Callback {
private static final String tag= "Preview";
public Preview(Context context) {
super(context);
Log.d(tag, "Preview()");
SurfaceHolder holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d(tag, "surfaceCreated");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d(tag, "surfaceDestroyed");
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { …
Run Code Online (Sandbox Code Playgroud) android opencv示例和教程运行正常,突然有一天我得到了所有这些"看来你的设备不支持相机(或它被锁定).应用程序将被关闭"请帮助如何解决
我重新安装了opencv并再次导入并制作了新的模拟器,但问题仍然存在