我有一个项目,我在其中要求在启动时获得 2 个权限。在调试过程中,它会按预期工作,直到它第二次调用 requestPermissions。一旦它这样做,第一个就会触发 onRequestPermissionsResult 并使用一个空的 grantResults 数组。
直到今天,它都运行良好。我唯一能想到的就是我今天所做的更新。我更新到 Android SDK Platform Tools 23.1,并将我的 Mac 更新到 El Capitan。
谁能帮我解决问题?
代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blank_layout);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
if (hasCameraPermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION_CODE);
}
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasStoragePermissions != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION_CODE);
}
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
} else {
startCameraIntent();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CAMERA_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.camera_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
case REQUEST_STORAGE_PERMISSION_CODE:
if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, R.string.storage_denied, Toast.LENGTH_LONG).show();
quitAfter5();
}
break;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int hasCameraPermissions = checkSelfPermission(android.Manifest.permission.CAMERA);
int hasStoragePermissions = checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (hasCameraPermissions == PackageManager.PERMISSION_GRANTED && hasStoragePermissions == PackageManager.PERMISSION_GRANTED) {
startCameraIntent();
}
}
}
编辑: 导致崩溃的原因是几天前我在我的 Nexus 5 上安装了自定义内核 ElementalX。我昨天在我兄弟的 Nexus 6 上使用相同的内核确认了这个问题。我将向内核开发人员发送一封电子邮件,看看他对此有何评论。
虽然在答案中,上面的代码确实是使用 requestPermissions 方法的不正确方法。所以每个人只要以正确的方式去做,它就会适用于所有设备:)
最佳答案
我期望两次连续调用 requestPermissions() 的最佳情况是出现两个连续但独立的对话框。我不希望您看到的行为。我以未正确处理配置更改的形式进行了类似的多次 requestPermissions() 调用,并且出现了两个版本的对话框。
在其他条件相同的情况下,您最好只在 requestPermissions() 中请求所有权限,因此只有一个对话框。这将更好地满足用户的期望,而且我认为它会稍微简化您的代码。
关于android - 在用户响应之前对自定义内核调用 onRequestPermissionsResult 调用 requestPermissions 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34324836/
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我需要一些关于TDD概念的帮助。假设我有以下代码defexecute(command)casecommandwhen"c"create_new_characterwhen"i"display_inventoryendenddefcreate_new_character#dostufftocreatenewcharacterenddefdisplay_inventory#dostufftodisplayinventoryend现在我不确定要为什么编写单元测试。如果我为execute方法编写单元测试,那不是几乎涵盖了我对create_new_character和display_invent
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些
有这些railscast。http://railscasts.com/episodes/218-making-generators-in-rails-3有了这个,你就会知道如何创建样式表和脚手架生成器。http://railscasts.com/episodes/216-generators-in-rails-3通过这个,您可以了解如何添加一些文件来修改脚手架View。我想把两者结合起来。我想创建一个生成器,它也可以创建脚手架View。有点像RyanBates漂亮的生成器或web_app_themegem(https://github.com/pilu/web-app-theme)。我
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s