Java 我试着在打电话时用摄像头led闪烁,但效果不好
我试图使LED闪光灯在设备接到来电时闪烁。我在接收中的代码正常。但闪光灯不闪烁。请检查代码并给我一些建议,说明为什么此代码不正常。谢谢Java 我试着在打电话时用摄像头led闪烁,但效果不好,java,android,xml,eclipse,android-intent,Java,Android,Xml,Eclipse,Android Intent,我试图使LED闪光灯在设备接到来电时闪烁。我在接收中的代码正常。但闪光灯不闪烁。请检查代码并给我一些建议,说明为什么此代码不正常。谢谢 MainActivity public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se
MainActivity
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
`
BroadcastReceiver
`package com.example.flashringing;
import org.apache.commons.logging.Log;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.telephony.TelephonyManager;
import android.widget.Toast;
public class IncomingCall extends BroadcastReceiver {
private Camera camera;
private boolean isFlashOn;
private boolean hasFlash;
Camera.Parameters params;
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String msg = "Ringing" + state;
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
String incomingNumber
=intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
// msg += ". Incoming number is " + incomingNumber;
Toast.makeText(context, "Brodcaststart>>>>",
Toast.LENGTH_LONG).show();
System.out.print("Brodcaststart>>>>");
// TODO This would be a good place to "Do something when the
phone rings" ;-)
String myString = "0101010101";
long blinkDelay = 50;
getCamera();
Toast.makeText(context, "cameraopen>>>>",
Toast.LENGTH_LONG).show();
System.out.print("cameraopen>>>>");
for (int i = 0; i < myString.length(); i++) {
if (myString.charAt(i) == '0') {
// params.setFlashMode(Camera.Parameters.FLASH_MODE_ON);
turnOnFlash();
} else {
//
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
turnOffFlash();
}
try {
Thread.sleep(blinkDelay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Toast.makeText(context, msg, Toast.LENGTH_LONG).show();
}
private void turnOnFlash() {
if (!isFlashOn) {
if (camera == null || params == null) {
return;
}
System.out.print("turnonflash>>>>");
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
camera.setParameters(params);
camera.startPreview();
isFlashOn = true;
}
}
private void getCamera() {
if (camera == null) {
try {
camera = Camera.open();
params = camera.getParameters();
System.out.print("cameraopen>>>>");
} catch (RuntimeException e) {
// Log.d( Log.e("Camera Error. Failed to Open. Error: ",
e.getLocalizedMessage()););
System.out.println("Camera Error. Failed to Open. Error:
"+e.getLocalizedMessage());
}
}
}
private void turnOffFlash() {
if (isFlashOn) {
if (camera == null || params == null) {
return;
}
params = camera.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);
camera.setParameters(params);
camera.release();
isFlashOn = false;
}
}
}`
AndroidManifest.xml`<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.flashringing"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.flashringing.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name="com.example.flashringing.IncomingCall"
android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" >
</action>
</intent-filter>
</receiver>
</application>
</manifest>``
main活动
公共类MainActivity扩展了活动{
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
}
`
广播接收机
`包com.example.flashringing;
导入org.apache.commons.logging.Log;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.hardware.Camera;
导入android.telephony.TelephonyManager;
导入android.widget.Toast;
公共类IncomingCall扩展了BroadcastReceiver{
私人摄像机;
私有布尔闪络;
私有布尔hasblash;
摄像机参数参数;
@凌驾
public void onReceive(上下文、意图){
字符串状态=intent.getStringExtra(TelephonyManager.EXTRA_状态);
字符串msg=“Ringing”+状态;
if(state.equals(TelephonyManager.EXTRA_state_RINGING)){
串入数
=intent.getStringExtra(TelephonyManager.EXTRA\u传入\u号码);
//msg+=”。输入号码为“+输入号码;
Toast.makeText(上下文,“Brodcaststart>>>>”,
Toast.LENGTH_LONG).show();
系统输出打印(“Brodcaststart>>>”;
//TODO这将是一个“当
电话铃声”;-)
字符串myString=“0101010101”;
长闪烁延迟=50;
getCamera();
Toast.makeText(上下文,“cameraopen>>>>”,
Toast.LENGTH_LONG).show();
系统输出打印(“cameraopen>>>”;
对于(int i=0;i>>”;
params=camera.getParameters();
参数设置闪光模式(摄像机参数闪光模式);
摄像机。设置参数(参数);
camera.startPreview();
isFlashOn=true;
}
}
专用照相机(){
如果(摄像机==null){
试一试{
camera=camera.open();
params=camera.getParameters();
系统输出打印(“cameraopen>>>”;
}捕获(运行时异常e){
//Log.d(Log.e)(“摄像头错误。无法打开。错误:”,
e、 getLocalizedMessage(););
System.out.println(“摄像头错误。无法打开。错误:
“+e.getLocalizedMessage());
}
}
}
专用真空关闭闪光灯(){
if(isFlashOn){
如果(摄像机==null | |参数==null){
返回;
}
params=camera.getParameters();
参数设置闪光模式(相机参数闪光模式关闭);
摄像机。设置参数(参数);
相机。释放();
isFlashOn=false;
}
}
}`
AndroidManifest.xml`
``