我在android中制作火炬应用程序

时间:2016-04-15 04:14:30

标签: android

创建一个简单的Torch应用程序,它可以放在相机闪光灯上并将其关闭。这个应用程序应该有一个简单的用户界面,可以放在Flash上​​,也可以把它关闭。 连续使用1分钟后,UI应提示用户他想继续使用Torch。如果用户说“是”,则火炬将继续保持一分钟,此循环将重复。如果用户说“否”,则应关闭火炬。

创建一个简单的火炬应用程序很容易,我已经制作了火炬应用程序,但问题中提到的第二件事是在1分钟后提示我无法理解的事情可以帮助任何人吗?

这是我的手电筒代码,任何人都可以告诉我在哪里改变它。

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends AppCompatActivity
{
    `enter code here`private boolean isLightOn=false;
    private Camera camera;
    private Button btn;


   @Override
   protected void onStop()
   {
       super.onStop();

       if(camera!= null)
           camera.release();
   }



    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button);
        Context context=this;

        PackageManager pk= context.getPackageManager();

        if(!pk.hasSystemFeature(PackageManager.FEATURE_CAMERA))
        {
            Log.e("err","Device has no camera");
            return;
        }
        camera=camera.open();
        final Parameters p= camera.getParameters();
        btn.setOnClickListener(new OnClickListener()
        {
         @Override
        public void onClick(View v)
         {

             if(isLightOn)
             {
                 Log.i("info","FlashLight is turn off");
                 p.setFlashMode(Parameters.FLASH_MODE_OFF);
                 camera.setParameters(p);
                 camera.stopPreview();
                 isLightOn=false;

             }
             else
             {
                 Log.i("info","FlashLight is turn On!");
                 p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                 camera.setParameters(p);
                 camera.startPreview();
                 isLightOn=true;

             }
         }

        });

    }
}

4 个答案:

答案 0 :(得分:1)

  1. 首先创建一个具有切换小部件的XML。然后使用onOffSwitch = (Switch) findViewById(R.id.switch1);
  2. 将其与Java连接
  3. 获取CameraManager以便您可以管理相机的元素(即闪光灯),使用mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 3.获取当前手机的摄像头ID,以便您可以指示Android使用mCameraId = mCameraManager.getCameraIdList()[0];
  4. 指向哪个摄像头
  5. 开启使用:mCameraManager.setTorchMode(mCameraId, true);
  6. 关闭使用:mCameraManager.setTorchMode(mCameraId, false);
  7. 代码:

    public class TorchActivity extends AppCompatActivity {
    
        CameraManager mCameraManager;
        String mCameraId;
        Switch onOffSwitch;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_torch);
    
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    
            WindowManager.LayoutParams layout = getWindow().getAttributes();
            layout.screenBrightness = 1F;
            getWindow().setAttributes(layout);
    
    
            onOffSwitch = (Switch) findViewById(R.id.switch1);
    
            mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
            try {
                mCameraId = mCameraManager.getCameraIdList()[0];
    
            } catch (CameraAccessException e) {
                e.printStackTrace();
            }
            Boolean isFlashAvailable = getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
            if (isFlashAvailable)
            {
                onOffSwitch.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (onOffSwitch.isChecked()) {
    
                            try {
                                mCameraManager.setTorchMode(mCameraId, true);
                            } catch (CameraAccessException e) {
                                e.printStackTrace();
                            }
                        }
                        else{
    
                            try {
                                mCameraManager.setTorchMode(mCameraId, false);
                            }
                            catch (CameraAccessException e) {
                                e.printStackTrace();
    
                            }
                        }
                    }
                });
    
            }else
            {
                Toast.makeText(this, "No Flash Support Found!", Toast.LENGTH_SHORT).show();
            }
    }
    
    //Use these permissions!
    
     Min SDK should be -  23
    //<uses-permission android:name="android.permission.CAMERA" />
    //<uses-permission android:name="android.permission.FLASHLIGHT" />
    //<uses-feature android:name="android.hardware.camera" />
    //<uses-feature android:name="android.hardware.camera.flash" />
    

答案 1 :(得分:0)

要在一定延迟后运行一些代码,您可以执行以下操作(其中1000是以毫秒为单位的延迟):

new Handler().postDelayed(new Runnable()
{
    @Override
    public void run()
    {
        // code to show prompt goes here
    }
}, 1000);

您可以将其转换为方法,每次用户确认提示时都会调用该方法。

答案 2 :(得分:0)

对于对话框,请检查this

检查this链接是否有闪光灯开/关。

一分钟后使用处理程序关闭Flash。

Handler handler = new Handler();

final Runnable r = new Runnable() {
    public void run() {
       //Turn off flash
    }
};

handler.postDelayed(r, 1000);

答案 3 :(得分:0)

     if(!pk.hasSystemFeature(PackageManager.FEATURE_CAMERA))
            {
                Log.e("err","Device has no camera");
                return;
            }
            camera=camera.open();
            final Parameters p= camera.getParameters();
            btn.setOnClickListener(new OnClickListener()
            {
             @Override
            public void onClick(View v)
             {

                 if(isLightOn)
                 {
                     Log.i("info","FlashLight is turn off");
                     p.setFlashMode(Parameters.FLASH_MODE_OFF);
                     camera.setParameters(p);
                     camera.stopPreview();
                     isLightOn=false;

                 }
                 else
                 {
                     Log.i("info","FlashLight is turn On!");
                     p.setFlashMode(Parameters.FLASH_MODE_TORCH);
                     camera.setParameters(p);
                     camera.startPreview();
                     isLightOn=true;
     new Handler().postDelayed(new Runnable() {
                        // Using handler with postDelayed called runnable run method
                        @Override
                        public void run() {
        //Show your Alert box here
        new AlertDialog.Builder(context) // you can use getApplicationContext() or your activityname.this as context
            .setTitle("Do You Want to continue")
            .setMessage("Are you sure you want to continue?")
            .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) { 
                    //Do nothing, Torch continues
                }
             })
            .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) { 
                    // torch off
 Log.i("info","FlashLight is turn off");
                 p.setFlashMode(Parameters.FLASH_MODE_OFF);
                 camera.setParameters(p);
                 camera.stopPreview();
                 isLightOn=false;
                }
             })
            .setIcon(android.R.drawable.ic_dialog_alert)
             .show();

        }
                    }, 60000); //60000milliseconds = 60 sec = 1min.

       // It will show alertbox after 1 min .

                 }
             }

            });

        }
    }