Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在麦克风音频捕获上切换Android摄像头闪光灯?_Android_Camera_Microphone_Flashlight_Blink - Fatal编程技术网

如何在麦克风音频捕获上切换Android摄像头闪光灯?

如何在麦克风音频捕获上切换Android摄像头闪光灯?,android,camera,microphone,flashlight,blink,Android,Camera,Microphone,Flashlight,Blink,下面的代码可以工作。它使摄像头在安卓手机麦克风捕捉到的任何音频上闪烁。它适用于三星Galaxy S Duos。 我只想让它更稳定,因为线程的存在 package net.superlinux.com; 导入java.io.IOException; 导入android.app.Activity; 导入android.content.pm.PackageManager; 导入android.hardware.Camera; 导入android.hardware.Camera.Parameters;

下面的代码可以工作。它使摄像头在安卓手机麦克风捕捉到的任何音频上闪烁。它适用于三星Galaxy S Duos。 我只想让它更稳定,因为线程的存在

package net.superlinux.com;
导入java.io.IOException;
导入android.app.Activity;
导入android.content.pm.PackageManager;
导入android.hardware.Camera;
导入android.hardware.Camera.Parameters;
导入android.media.MediaRecorder;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.SeekBar;
导入android.widget.SeekBar.onseekbarchaneglistener;
导入android.widget.TextView;
导入android.widget.Toast;
导入android.widget.ToggleButton;
/**
*@作者
* 
*/
公共类FlashOnMicrophone扩展了活动{
/*(非Javadoc)
*@see android.app.Activity#onCreate(android.os.Bundle)
*/
//切换按钮,将照相机闪光灯切换为闪烁打开和关闭。
切换按钮闪烁\u在麦克风上\u切换按钮;
//SeekBar可设置闪光灯闪烁时的麦克风灵敏度水平。
SeekBar-SeekBar;
//摄影机对象
摄像机;
/*准备一个线程,使GUI与摄像头和麦克风分离。
否则,手机将挂起并冻结*/
螺纹;
//mRecoder是麦克风对象
多媒体录像机;
//线程中用于打开闪烁闪光灯的标志。
布尔值isLightOn=false;
//灵敏度保持相机闪光灯闪烁时的最小振幅值
int灵敏度=0;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//TODO自动生成的方法存根
setContentView(右布局,麦克风上闪烁);
麦克风上的闪光按钮=(闪光按钮)findViewById(R.id.flash麦克风上的闪光按钮);
seekBar=(seekBar)findViewById(R.id.seekBar);
//灵敏度默认值为1500。
seekBar.setProgress(1500);//默认灵敏度值
//下面的事件侦听器设置全局变量“sensitivity”,以便线程可以获取它。
seekBar.setonseekbarchaneglistener(新的onseekbarchaneglistener(){
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
//TODO自动生成的方法存根
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
//TODO自动生成的方法存根
}
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
//TODO自动生成的方法存根
//这里的代码中没有提到TextView,但它在XML布局中。
//我们使用此文本视图显示变量灵敏度
//我们还将SeekBar按钮的当前位置设置为灵敏度。
敏感性=进展;
((TextView)findViewById(R.id.microsmic_sensitivity_TextView)).setText(getString(R.string.microsmic_sensitivity_level)+“=”+灵敏度);
}
});
PackageManager pm=this.getPackageManager();
//以下操作确保摄像头存在。否则,请警告应用程序用户并退出应用程序。
如果(!pm.hasSystemFeature(PackageManager.FEATURE\u摄像头)){
Toast.makeText(此“设备没有摄像头!”,Toast.LENGTH_LONG.show();
完成();
返回;
}
//显示屏必须始终解锁,以保持闪光灯工作。
getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG\u保持屏幕打开);
//打开相机,并获取其参数以设置相机设置。
camera=camera.open();
最终参数p=camera.getParameters();
//我们打开一个线程,但在定义麦克风后将运行它。
线程=新线程(新可运行(){
@凌驾
公开募捐{
//我们让线程永远运行。
//每次isLightOn为真时,我们都会闪烁闪光灯。
//如果麦克风振幅超过变量“灵敏度”的值,则打开闪光灯
while(true){
while(伊斯莱顿){
试一试{
int volume_level=mRecorder.getMaxAmpliance();
if(音量>灵敏度){
Log.i(“信息”,“火炬已关闭!”);
//关闭闪光灯和相机预览。
//如果没有相机预览,我们无法访问闪光灯设备。两者都连接到另一个
p、 设置闪光模式(参数。闪光模式关闭);
摄像机参数设置(p);
camera.stopPreview();
//现在打开闪光灯,也打开相机预览。
Log.i(“信息”,“火炬打开了!”);
p、 设置闪光模式(参数:闪光模式);
摄像机参数设置(p);
camera.startPreview();
//在这种情况下,相机预览将不起作用,因为预览参数表上的打开和关闭速度非常快
}
}捕获(例外e){
//TODO自动生成的捕捉块
Log.i(“信息”,“火炬已关闭!”);
e、 printStackTrace();
}
}
}
}
});
/*
将音频捕获源准备为麦克风。
并将音频保存在文件“/dev/null”中。
这是Linux中的一个特殊文件。请知道Android是Linux发行版。
这个文件就像空间中的黑洞。你也可以把它看作是无用和流放数据的垃圾箱。
在这里,我们不想保存声音。我们只想感知它,其他什么都不想。所以我们把它扔进了“/dev/null”中。
*/
mRecorder=新的MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC)