E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xindawn.mediarender, PID: 18702
java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -3
at android.media.audiofx.Visualizer.<init>(Visualizer.java:238)
at com.xx.mediarender.player.MusicPlayEngineImpl.reInitVisualizer(MusicPlayEngineImpl.java:48)
at com.xx.mediarender.player.MusicPlayEngineImpl.prepareComplete(MusicPlayEngineImpl.java:137)
at com.xx.mediarender.player.AbstractMediaPlayEngine.onPrepared(AbstractMediaPlayEngine.java:122)
at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3984)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8582)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:563)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)
错误原因:没有权限,Android6.0以后需要动态申请RECORD_AUDIO权限。
授权代码如下:
List<String> permissions = new ArrayList<String>();
private boolean askPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int RECORD_AUDIO = checkSelfPermission( Manifest.permission.RECORD_AUDIO );
if (RECORD_AUDIO != PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.RECORD_AUDIO);
}
if (!permissions.isEmpty()) {
requestPermissions(permissions.toArray(new String[permissions.size()]), 1);
} else
return false;
} else
return false;
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 1) {
boolean result = true;
for (int i = 0; i < permissions.length; i++) {
result = result && grantResults[i] == PackageManager.PERMISSION_GRANTED;
}
if (!result) {
Toast.makeText(this, "授权result="+result, Toast.LENGTH_LONG).show();//授权结果
} else {
//成功
}
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}