Java 我试着在打电话时用摄像头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

我试图使LED闪光灯在设备接到来电时闪烁。我在接收中的代码正常。但闪光灯不闪烁。请检查代码并给我一些建议,说明为什么此代码不正常。谢谢

 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`
``