2016-05-18 77 views
-2

我已经创建了简单的手电筒应用程序。编译时没有任何错误。但是当图标被点击时,它意外停止。我已经尝试在物理android手机和模拟器。两者都有相同的结果。我无法看到代码中的任何问题。有人可以提出这个问题。手电筒应用程序在点击图标秒内崩溃

Flashlight.java(活动)

package flashlight.turnmeyon.crystal.laser; 

import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.pm.PackageManager; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.ImageButton; 

public class Flashlight extends AppCompatActivity { 

ImageButton imagebutton; 
Camera camera; 
Camera.Parameters parameters; 
boolean isflash = false; 
boolean ison = false; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.ac_flashlight); 

    imagebutton = (ImageButton) findViewById(R.id.buttonOn); 

    if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { 
     camera.open(); 
     parameters = camera.getParameters(); 
     isflash = true; 
    } 
    imagebutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (isflash) { 
       if (!ison) { 
        imagebutton.setImageResource(R.drawable.buttonon); 
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH); 
        camera.setParameters(parameters); 
        camera.startPreview(); 
        ison = true; 
       } else { 
        imagebutton.setImageResource(R.drawable.buttonof); 
        parameters.setFlashMode(Camera.Parameters.FLASH_MODE_OFF); 
        camera.setParameters(parameters); 
        camera.stopPreview(); 
        ison = false; 
       } 
       } 
      else 
      { 
       AlertDialog.Builder builder = new AlertDialog.Builder(Flashlight.this); 
       builder.setTitle("Error..........."); 
       builder.setMessage("Flashlight is not avaliable"); 
       builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
         finish(); 
        } 
       }); 
       AlertDialog alertdialog = builder.create(); 
       alertdialog.show(); 
      } 
     } 
    }); 
} 
@Override 
protected void onStop() { 
    super.onStop(); 
    if (camera != null) { 
     camera.release(); 
     camera = null; 
    } 
} 
} 

layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
android:background="#757575" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<ImageButton 
android:id="@+id/buttonOn" 
android:layout_height="match_parent" 
android:layout_width="match_parent" 
android:background="#757575" 
android:src="@drawable/buttonof" 
android:scaleType="fitCenter" 
android:layout_marginTop="80dp" 
android:layout_marginRight="80dp" 
android:layout_marginLeft="80dp" 
android:layout_marginBottom="40dp" 
android:layout_centerVertical="true" 
/> 

</RelativeLayout> 
+1

请加logcat的崩溃输出。 –

+0

您是否在AndroidManifest.xml文件中添加了权限? –

+0

'camera'为null。 – 323go

回答

3

这里是给你参考。

我创建了Flash示例。请查看下面的代码。

public class MainActivity extends AppCompatActivity { 

    ImageView switch_on_off; 
    private Camera camera; 
    Parameters params; 
    public boolean isSupportFlash, isFlashLighOn; 
    String status; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     isSupportFlash = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH); 
     if (!isSupportFlash) { 
      Toast.makeText(getApplicationContext(), "Your device does not support flash. ", Toast.LENGTH_LONG).show(); 
     } 
     switch_on_off = (ImageView) findViewById(R.id.switch_on_off); 

     connectCameraService(); 
     switch_on_off.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (isFlashLighOn) { 
        offFlashLight(); 
        switch_on_off.setImageResource(R.drawable.switch_off); 
       } else { 
        onFlashLight(); 
        switch_on_off.setImageResource(R.drawable.switch_on); 
       } 
      } 
     }); 
    } 

    public void onFlashLight() { 
     if (!isFlashLighOn) { 
      status = "ON"; 
      if (camera == null || params == null) { 
       return; 
      } 
      params = camera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_TORCH); 
      camera.setParameters(params); 
      camera.startPreview(); 
      isFlashLighOn = true; 
      switch_on_off.setImageResource(R.drawable.switch_on); 

     } 
    } 

    public void offFlashLight() { 
     if (isFlashLighOn) { 
      status = "ON"; 
      if (camera == null || params == null) { 
       return; 
      } 
      params = camera.getParameters(); 
      params.setFlashMode(Parameters.FLASH_MODE_OFF); 
      camera.setParameters(params); 
      camera.stopPreview(); 
      isFlashLighOn = false; 
      switch_on_off.setImageResource(R.drawable.switch_off); 
     } 
    } 

    public void connectCameraService() { 
     if (camera == null) { 
      camera = android.hardware.Camera.open(); 
      params = camera.getParameters(); 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     offFlashLight(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     offFlashLight(); 
    } 

    @Override 
    protected void onRestart() { 
     super.onRestart(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     /*if (isSupportFlash) { 
      onFlashLight(); 
     }*/ 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     connectCameraService(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     if (camera != null) { 
      camera.release(); 
      camera = null; 

     } 
    } 
} 

需要的许可权

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
+0

我已经添加了布局xml。你能证明它是否正确?我已经添加到清单中的其余权限。 – Marsh

+0

@Marsh请添加您的logcat。没有logcat我无法帮助你。 –

+0

ty。伴侣。该应用程序现在运行良好。但过渡效果会有轻微的ms延迟。我的意思是,需要毫秒将ON图像关闭图像,反之亦然。我怎么能让它稍微高效。 – Marsh