小编ace*_*cee的帖子

Android RequestMultiplePermissions 不提示具有某些权限组合的权限?

我正在更新当前使用该权限的应用程序,并且根据新的 API 30 要求,现在也ACCESS_FINE_LOCATION需要该权限。ACCESS_BACKGROUND_LOCATION

在更新应用程序以添加此权限时,我还尝试使用新的 ActivityResultLauncher 回调方法来请求权限(https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code

使用以下方式启动单个请求似乎效果很好:

ActivityResultLauncher<String> launcher = registerForActivityResult(
    new ActivityResultContracts.RequestPermission(), this::processPermissionResult);

launcher.launch(somePermission);
Run Code Online (Sandbox Code Playgroud)

但是,由于我需要两者,ACCESS_FINE_LOCATION并且ACCESS_BACKGROUND_LOCATION它需要一些额外的代码来跟踪多个回调的结果(因为每个请求都会生成自己的回调),以便在授予一个、两个或没有一个权限的情况下我可以采取适当的操作。

为了稍微简化一下,我希望改用该RequestMultiplePermissions方法,这样可以方便地为我提供一个回调,其中包含地图中的所有结果:

ActivityResultLauncher<String[]> launcher = registerForActivityResult(
    new ActivityResultContracts.RequestMultiplePermissions(), this::processPermissionResult);

launcher.launch(new String[] {
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_BACKGROUND_LOCATION
});
Run Code Online (Sandbox Code Playgroud)

然而,我发现当我在同一个请求中同时请求这两个权限时ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION系统不再提示我任何一个权限对话框,并且回调对于这两个权限都返回 false。

但是,我可以通过给它一个包含单个权限的数组来单独请求这些权限RequestMultiplePermissions,然后使用与使用单个RequestPermission调用相同的方法多次调用 launch ,这将起作用。

似乎在ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION权限之间存在一些冲突/交互RequestMultiplePermissions?我能够取出ACCESS_BACKGROUND_LOCATION并使用不同的权限,例如WRITE_EXTERNAL_STORAGE,并且我会收到两个单独的权限对话框提示。

我是否误解了ACCESS_FINE_LOCATIONACCESS_BACKGROUND_LOCATION权限?我不应该同时请求它们吗?

android android-permissions android-10.0

8
推荐指数
0
解决办法
3310
查看次数

Excel Automation Workbooks.Open失败:"无法获取Open Property ..."

我正在使用一个执行一些Excel自动化的Web应用程序(我知道 - 不是首选解决方案).

我使用Excel 2007作为我的开发平台,但目标服务器使用的是Excel 2003.尽管在开发期间我明确选择了Excel 11,但在尝试加载到目标服务器上的Excel 12互操作后遇到了很多麻烦,我已经求助于使用后期绑定而不是早期绑定.

这使我能够实现Excel的实例化(我可以看到Excel进程在目标服务器上的任务管理器中启动).

但是我无法调用后期绑定的Workbooks对象的Open方法.它向我抛出这个错误:

"Unable to get the Open property of the Workbooks class"
Run Code Online (Sandbox Code Playgroud)

我一直在尝试一些不同的东西,并尝试了以下内容:

  • 尝试相同的Workbook.使用后期绑定VBScript打开调用(例如,vbs文件).
  • 尝试使用相同的Workbook.使用后期绑定的VBA代码打开调用(例如在Excel中).
  • 尝试使用相同的Workbook.在Windows窗体应用程序中使用后期绑定.NET代码打开调用.
  • 在所有三种情况下,Excel自动化都成功.只有当我部署ASP.NET应用程序时,才会出现此错误.在一个非常简化的形式,代码类似于:

    Dim xlApp As Object 'Excel.Application
    Dim xlBook As Object ' Excel.Workbook
    xlApp = CreateObject("Excel.Application") 'New Excel.Application
    xlBook = xlApp.Workbooks.Open("somefile.xls", , True, , , , , , , , , , , , False)
    
    Run Code Online (Sandbox Code Playgroud)

    有没有人对可能发生的事情有任何想法?我检查了用户Excel进程启动的用户,并且它与我成功运行Windows Forms .NET应用程序的用户相同.我已经打开Excel作为此用户清除所有初始设置的东西.

    asp.net excel

    6
    推荐指数
    1
    解决办法
    7959
    查看次数

    何时在Oracle的查询中评估用户定义的函数?

    我在SELECT语句中使用用户定义的函数时遇到了一些有趣的行为.

    我有几个存储过程从单个表中读取和清除数据.这些存储过程由多个源使用.

    在我的观察中,似乎用户定义的函数有时是任意评估的,并不总是在执行它所使用的SELECT语句之后或期间立即进行评估.

    例如,在存储过程中,我有一个select语句可能看起来像这样:

    SELECT Something, MyFunction(Something) FROM Somewhere;
    
    Run Code Online (Sandbox Code Playgroud)

    然后调用另一个存储过程,该过程从表中清除数据.清除的数据量由另一个表控制,该表存储最大ID读取.这样清除不应该删除任何尚未被执行的存储过程的另一个实例读取的数据.

    在我的测试代码中,MyFunction只返回表Somewhere中的行数.因此,我认为它应该始终等于SELECT语句返回的行数.但是,在我运行此存储过程的两个实例的情况下,我得到如下结果:

    第一个查询实例:

    Something  MyFunction(Something)
    ---------  ---------------------
    A          3
    B          3
    C          3
    
    Run Code Online (Sandbox Code Playgroud)

    第二个查询实例:

    Something  MyFunction(Something)
    ---------  ---------------------
    A          0
    B          0
    C          0    
    
    Run Code Online (Sandbox Code Playgroud)

    为什么第二个查询返回所有行,但在同一个表上运行的用户定义函数报告表中没有更多行?

    无论如何,我可以确保第二个查询实例是一致的,因为用户定义的函数仍然看到父存储过程看到的相同数据?

    oracle plsql oracle9i

    6
    推荐指数
    1
    解决办法
    5063
    查看次数