求解答androidandroid 获取运行时间的一个错误

没有更多推荐了,
不良信息举报
举报内容:
android 面试问题解答
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!求解答&Android的一个小的应用程序在模拟器中的运行问题
Android的一个小的应用程序在手机上运行时一点儿问题都没有,在Android 2.3.3模拟器中也无问题,可是在4.0 以上的模拟器中运行时会异常退出。在网上搜了一大圈儿,可都是模拟器中运行正常而真机上运行不正常的问题。在开源社区中有tfc写了相关的问题,但他只说“已找到了问题的答案,是因为android4.03 模拟器的问题,在设备上可以正常运行的”,可具体情况是怎样,哪位高手忙我解答解答,感激不尽啊!
在4.0.3中运行日志如下:
08-29 16:24:50.213: E/AudioEffect(646): set(): AudioFlinger could not create effect, status: -22
08-29 16:24:50.213: E/visualizers-JNI(646): Visualizer initCheck failed -4
08-29 16:24:50.213: E/Visualizer-JAVA(646): Error code -4 when initializing Visualizer.
08-29 16:24:50.223: W/dalvikvm(646): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
08-29 16:24:50.233: E/AndroidRuntime(646): FATAL EXCEPTION: main
08-29 16:24:50.233: E/AndroidRuntime(646): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wjq.audiofx/com.wjq.audiofx.Main}: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread.access$600(ActivityThread.java:123)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.os.Looper.loop(Looper.java:137)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread.main(ActivityThread.java:4424)
08-29 16:24:50.233: E/AndroidRuntime(646):
at java.lang.reflect.Method.invokeNative(Native Method)
08-29 16:24:50.233: E/AndroidRuntime(646):
at java.lang.reflect.Method.invoke(Method.java:511)
08-29 16:24:50.233: E/AndroidRuntime(646):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-29 16:24:50.233: E/AndroidRuntime(646):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-29 16:24:50.233: E/AndroidRuntime(646):
at dalvik.system.NativeStart.main(Native Method)
08-29 16:24:50.233: E/AndroidRuntime(646): Caused by: java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -4
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.media.audiofx.Visualizer.&init&(Visualizer.java:182)
08-29 16:24:50.233: E/AndroidRuntime(646):
at com.wjq.audiofx.Main.setupVisualizerFxAndUI(Main.java:148)
08-29 16:24:50.233: E/AndroidRuntime(646):
at com.wjq.audiofx.Main.onCreate(Main.java:43)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.Activity.performCreate(Activity.java:4465)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
08-29 16:24:50.233: E/AndroidRuntime(646):
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
08-29 16:24:50.233: E/AndroidRuntime(646):
... 11 more
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.034 (s). 10 q(s)&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Android 6.0运行时权限详解
摘要:1.介绍RuntimePermissions官方说明Android6.0之前,权限在应用安装过程中只询问一次,以列表的形式展现给用户,然而大多数用户并不会注意到这些,直接就下一步了,应用安装成功后就会被赋予清单文件中的所有权限,应用就可以在用户不知情的情况下进行非法操作(比如偷偷的上传用户数据)。Android6.0版本中运行时权限的出现解决了这一问题,一些高危权限会在应用的运行过程中动态申请,这样用户就可以选择是否允许,比如一个单机游戏要获取通讯录权限,那肯定要禁止了。并不
Runtime Permissions官方说明
Android 6.0之前,权限在应用安装过程中只询问一次,以列表的形式展现给用户,然而大多数用户并不会注意到这些,直接就下一步了,应用安装成功后就会被赋予清单文件中的所有权限,应用就可以在用户不知情的情况下进行非法操作(比如偷偷的上传用户数据)。
Android 6.0版本中运行时权限的出现解决了这一问题,一些高危权限会在应用的运行过程中动态申请,这样用户就可以选择是否允许,比如一个单机游戏要获取通讯录权限,那肯定要禁止了。
并不是所有的权限都需要动态申请,需要申请的权限如下表所示:注意:同一组内的任何一个权限被授权了,其他权限也自动被授权。例如,一旦READ_CALENDAR被授权了,应用也有WRITE_CALENDAR权限了。
2.运行时权限处理
通过一个Demo来了解运行时权限的处理,先上图
第一次申请权限,拒绝后再次申请,申请成功
多次拒绝后,点击不再提示
二话不说,上代码
package com.yang.
import android.M
import android.annotation.TargetA
import android.content.DialogI
import android.content.pm.PackageM
import android.graphics.C
import android.os.B
import android.os.B
import android.support.v4.app.ActivityC
import android.support.v4.content.ContextC
import android.support.v7.app.AlertD
import android.support.v7.app.AppCompatA
import android.widget.TextV
import android.widget.T
import butterknife.B
import butterknife.ButterK
import butterknife.OnC
public class RuntimePermissionsActivity extends AppCompatActivity {
@Bind(R.id.tv_permission_status)
TextView tvPermissionS
private final int CAMERA_REQUEST_CODE = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
ButterKnife.bind(this);
@OnClick(R.id.btn_request_permission)
public void onClick() {
requestPermission();
@TargetApi(Build.VERSION_CODES.M)
private void requestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
// 第一次请求权限时,用户如果拒绝,下一次请求shouldShowRequestPermissionRationale()返回true
// 向用户解释为什么需要这个权限
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
new AlertDialog.Builder(this)
.setMessage(&申请相机权限&)
.setPositiveButton(&确定&, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//申请相机权限
ActivityCompat.requestPermissions(RuntimePermissionsActivity.this,
new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
//申请相机权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
tvPermissionStatus.setTextColor(Color.GREEN);
tvPermissionStatus.setText(&相机权限已申请&);
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_REQUEST_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
tvPermissionStatus.setTextColor(Color.GREEN);
tvPermissionStatus.setText(&相机权限已申请&);
//用户勾选了不再询问
//提示用户手动打开权限
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Toast.makeText(this, &相机权限已被禁止&, Toast.LENGTH_SHORT).show();
首先来看requestPermission方法
1&首先判断当前应用有没有CAMERA权限,如果没有则进行申请。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED)
2&如果没有CAMERA权限,进行如下判断,当第一次申请权限时 shouldShowRequestPermissionRationale返回false,第一次用户拒绝,再次申请的时候返回true,在此判断中提示用户为什么要申请这个权限。
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA))
3&如果用户点击了允许,则调用requestPermissions方法申请权限,注意里面接收的参数是一个String数组,也就是说可以同时申请多个权限,不过不建议这么做。
//申请相机权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
onRequestPermissionsResult回调方法
此方法是权限申请的回调方法,在此方法中处理权限申请成功或失败后的操作。
1&因为可以同时申请多个权限,所以回调的结果是以数组方式返回的,如果用户点击允许的话,此判断为true,可以在里面处理打开摄像头的操作。
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
2&当多次(两次或两次以上)请求操作时,会有不再提示的选择框,如果用户选择了不再提示,shouldShowRequestPermissionRationale为false,在此判断中提示用户权限已被禁止,需要在应用管理中自行打开。
if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Toast.makeText(this, &相机权限已被禁止&, Toast.LENGTH_SHORT).show();
shouldShowRequestPermissionRationale()说明
shouldShowRequestPermissionRationale() 默认返回 false。
第一次请求权限时,如果用户拒绝了,再次请求时 shouldShowRequestPermissionRationale() 返回 true。
多次请求权限(超过一次),用户如果选择了不再提醒并拒绝,shouldShowRequestPermissionRationale() 返回 false。
设备的策略禁止当前应用获取这个权限的授权,shouldShowRequestPermissionRationale() 返回 false。
3.第三方库PermissionsDispatcher
PermissionsDispatcher通过注解的方式,动态生成类处理运行时权限。配合插件使用,可自动生成代码。
github地址:https://github.com/hotchemi/PermissionsDispatcher
使用方法如下:
1&将下面这段代码添加到project的build.gradle文件中。
buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
2&将下面的代码添加到app module的build.gradle文件中,${latest.version}填写最新的版本号,目前为2.1.3。
apply plugin: 'android-apt'
dependencies {
compile 'com.github.hotchemi:permissionsdispatcher:${latest.version}'
apt 'com.github.hotchemi:permissionsdispatcher-processor:${latest.version}'
3&在Android Studio中选择File——Setting——Plugins,搜索PermissionsDispatcher,点击install安装,如下图所示:
4&准备工作已经完成了,下面来进行代码的生成,在Android Studio中选择Code——Generate——Generate Runtime Permissions,如下图所示:
@NeedsPermission当申请的权限被用户允许后,调用此方法。
@OnShowRationale当第一次申请权限时,用户选择拒绝,再次申请时调用此方法,在此方法中提示用户为什么需要这个权限。
@OnPermissionDenied当申请的权限被用户拒绝后,调用此方法
@OnNeverAskAgain当用户点击不再询问后,调用此方法。
代码处理如下:
package com.yang.
import android.M
import android.annotation.TargetA
import android.content.DialogI
import android.graphics.C
import android.os.B
import android.os.B
import android.support.v7.app.AlertD
import android.support.v7.app.AppCompatA
import android.widget.TextV
import android.widget.T
import butterknife.B
import butterknife.ButterK
import butterknife.OnC
import permissions.dispatcher.NeedsP
import permissions.dispatcher.OnNeverAskA
import permissions.dispatcher.OnPermissionD
import permissions.dispatcher.OnShowR
import permissions.dispatcher.PermissionR
import permissions.dispatcher.RuntimeP
@RuntimePermissions
public class PermissionsDispatcherActivity extends AppCompatActivity {
@Bind(R.id.tv_permission_status)
TextView tvPermissionS
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
ButterKnife.bind(this);
@OnClick(R.id.btn_request_permission)
public void onClick() {
requestPermission();
@TargetApi(Build.VERSION_CODES.M)
private void requestPermission() {
//申请权限
PermissionsDispatcherActivityPermissionsDispatcher.openCameraWithCheck(this);
@NeedsPermission(Manifest.permission.CAMERA)
void openCamera() {
tvPermissionStatus.setTextColor(Color.GREEN);
tvPermissionStatus.setText(&相机权限已申请&);
@OnShowRationale(Manifest.permission.CAMERA)
void showRationale(final PermissionRequest request) {
new AlertDialog.Builder(this)
.setMessage(&申请相机权限&)
.setPositiveButton(&确定&, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//再次执行请求
request.proceed();
@OnPermissionDenied(Manifest.permission.CAMERA)
void permissionDenied() {
Toast.makeText(this, &权限被拒绝&, Toast.LENGTH_SHORT).show();
@OnNeverAskAgain(Manifest.permission.CAMERA)
void neverAskAgain() {
Toast.makeText(this, &不再询问&, Toast.LENGTH_SHORT).show();
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
PermissionsDispatcherActivityPermissionsDispatcher.onRequestPermissionsResult(this, requestCode, grantResults);
为了保持兼容性建议使用v4包的兼容方法:
ContextCompat.checkSelfPermission()ActivityCompat.requestPermissions()ActivityCompat.OnRequestPermissionsResultCallbackActivityCompat.shouldShowRequestPermissionRationale()
当targetSdkVersion小于23,但是设备是6.0系统时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
用户可以在设置列表中编辑相关权限,这对应用能否正常运行有很大影响
当targetSdkVersion大于等于23,但是设备系统小于6.0时:
设备权限模型使用老的版本
清单文件中列出的权限只会在安装时询问
5.写在最后
源码已托管到GitHub上,欢迎Fork,觉得还不错就Start一下吧!
GitHub地址:https://github.com/alidili/PermissionDemo
Demo下载地址:http://download.csdn.net/detail/kong_gu_you_lan/9628379
欢迎同学们吐槽评论,如果你觉得本篇博客对你有用,那么就留个言或者点下喜欢吧(^-^)
我把使用运行时权限遇到的一些问题汇总到了一篇博客中,欢迎点击查看《Android 6.0运行时权限问题汇总》。
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Android 6.0运行时权限详解相关信息,包括
的信息,所有Android 6.0运行时权限详解相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International用Android studio1.5.1做一个最简单的音乐播放器,求大神能从第一步到最后一步演示,_百度知道
用Android studio1.5.1做一个最简单的音乐播放器,求大神能从第一步到最后一步演示,
用Android studio1.5.1做一个最简单的音乐播放器,求大神能从第一步到最后一步演示,并附上所有代码,以及注意事项(初学者艰难的学习中😭)
我有更好的答案
音乐播放器的视频在网上不是挺容易找的嘛。。。我找找我网盘还有没有,有的话再告诉你
网上找到的各种报错,都不能打包成apk文件,如果有的话麻烦给一下😁,蟹蟹
额(⊙o⊙)…报错是因为你没有导入第三方包,我这有一个是自己录制的视频,太大了,不好发,你是要做到什么程度的,用来干嘛的
采纳率:65%
来自团队:
亲,我也在做音频播放器,能不能给我发一个啊,
1条折叠回答
为您推荐:
其他类似问题
android的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用eclipse开发安卓时,建了一个安卓项目,文件都没有错误,但是运行时却有错误,详细的见下图,急求解决。_百度知道
用eclipse开发安卓时,建了一个安卓项目,文件都没有错误,但是运行时却有错误,详细的见下图,急求解决。
我有更好的答案
把每个.java都各自ctrl+s 保存一下! 可能是你该过东西没保存!试试吧我以前经常那样!
采纳率:26%
你光把这个贴出来有啥用啊,你要实现什么功能,报什么错说下吧
为您推荐:
其他类似问题
安卓的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 android 运行时注解 的文章

 

随机推荐