【问题标题】:I'm not able to get the camera to turn on its light我无法让相机打开它的灯
【发布时间】:2014-02-02 17:49:27
【问题描述】:

我有一个简单的类应用程序,它应该打开相机的灯,但这是我的错误日志;

02-02 12:40:47.939: W/dalvikvm(24314): threadid=1: thread exiting with uncaught exception (group=0x4178d898)
02-02 12:40:47.949: E/AndroidRuntime(24314): FATAL EXCEPTION: main
02-02 12:40:47.949: E/AndroidRuntime(24314): java.lang.NullPointerException
02-02 12:40:47.949: E/AndroidRuntime(24314):    at de.vogella.android.notificationmanager.NotificationReceiverActivity.onClick(NotificationReceiverActivity.java:53)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.view.View.performClick(View.java:4475)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.view.View$PerformClick.run(View.java:18784)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.os.Handler.handleCallback(Handler.java:730)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.os.Looper.loop(Looper.java:137)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at android.app.ActivityThread.main(ActivityThread.java:5414)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at java.lang.reflect.Method.invokeNative(Native Method)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at java.lang.reflect.Method.invoke(Method.java:525)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
02-02 12:40:47.949: E/AndroidRuntime(24314):    at dalvik.system.NativeStart.main(Native Method)

这是我的课;

import android.os.Bundle;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;

public class NotificationReceiverActivity extends Activity implements OnClickListener {
    private final String CLASSNAME = getClass().getSimpleName();
    boolean camOn = false;
    public boolean started;

Camera cam = null;
ImageButton ib1;
Parameters para;
PowerManager pm;
WakeLock wl;
@Override
protected void onCreate(Bundle savedInstanceState) {
started = true;
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "whatever");
super.onCreate(savedInstanceState);
setContentView(R.layout.result);

wl.acquire();
initialize();
ib1.setOnClickListener(this);
Log.i(CLASSNAME, "CREATING NOW  "+camOn);
}

private void initialize() {
// TODO Auto-generated method stub
ib1 = (ImageButton) findViewById(R.id.ib2);
}

public void onClick(View v) {

// TODO Auto-generated method stub
if (camOn == false) {
       cam.release();

    cam = Camera.open();
    para = cam.getParameters();
    para.setFlashMode(Parameters.FLASH_MODE_TORCH);
    cam.setParameters(para);
    Log.i(CLASSNAME, "AA1  "+camOn);
    camOn = true;
    Log.i(CLASSNAME, "AA2  "+camOn);

} 



else {
    para.setFlashMode(Parameters.FLASH_MODE_OFF);
    cam.setParameters(para);
    cam.release();
    //cam = null;
    Log.i(CLASSNAME, "BB1  "+camOn);
    camOn = false;
    Log.i(CLASSNAME, "BB2  "+camOn);

}
}

@Override
protected void onPause() {
super.onPause();
// TODO Auto-generated method stub
cam.release();
//  cam=cam;
// finish();*/
}
@Override
protected void onStop() {
super.onStop();
// cam.release();

}
@Override
protected void onDestroy() {
super.onDestroy();
// cam.release();

}
protected void onResume() {
super.onResume();
//cam = Camera.open();
}

}

如果我在 android 4.1.2 上运行完全相同的代码,它可以完美运行,但在我的 4.3 版本的 android Galaxy note3 上,它会显示 GUI,当您单击按钮以打开/关闭相机灯时什么都不做,把你看到的日志猫给我。

这是布局文件;

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Flash" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="147dp"
        android:layout_marginBottom="15dip"
        android:gravity="center"
        android:padding="15dip"
        android:text="\n\n\n\n\n"
        android:textColor="#3b3b3b"
        android:textSize="13dip" />

    <ImageButton
        android:id="@+id/ib2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="15dip"
        android:gravity="center"
        android:padding="15dip"
        android:text="\n"
        android:textColor="#3b3b3b"
        android:textSize="13dip" />

</LinearLayout>

【问题讨论】:

    标签: android android-camera oncreate user-permissions


    【解决方案1】:

    我注意到了几件事。

    首先,当camOn == false 你有cam.release() 即使cam=Null 在那个时候。如果我在那里遗漏了一些东西,那很好。

    第二个是你实际上需要一个surfaceView 元素来使用相机。有些设备没有这个也可以,但它是android系统的一部分,详细here

    例如,在你的布局中添加一个surfaceView之后,你会这样做

    msurfaceView = (SurfaceView)findViewById(R.id.surfaceView);
    msurfaceHolder = surfaceView.getHolder();
    msurfaceHolder.addCallback(this);
    msurfaceHolder.setFixedSize(1, 1); 
    

    setParameters设置相机参数后,调用

    mCamera.setPreviewDisplay(mSurfaceHolder);
    mCamera.startPreview();
    

    这是我的一部手机上的一个问题,使用表面视图解决了这个问题。我假设您已编辑清单文件以包含正确的权限。

    【讨论】:

    • 你是救生员!我刚刚添加了我的布局文件,你能告诉我如何在那里实现它吗?另外,我应该将课程扩展到 SurfaceView 吗?我已经能感觉到很多错误了。
    • 太好了,很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多