【问题标题】:I am making a torch App in android我正在android中制作一个手电筒应用程序
【发布时间】:2018-05-25 15:40:03
【问题描述】:

创建一个简单的 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;

             }
         }

        });

    }
}

【问题讨论】:

  • 您阅读过警报管理器和警报对话框吗?

标签: android


【解决方案1】:
  1. 首先创建一个具有开关小部件的 XML。然后用Java连接它,使用onOffSwitch = (Switch) findViewById(R.id.switch1);
  2. 获取CameraManager,以便您可以管理相机的元素(即闪光灯),使用mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 3.获取当前手机的相机ID,以便您可以指示android指向哪个相机,使用mCameraId = mCameraManager.getCameraIdList()[0];
  3. 开启使用:mCameraManager.setTorchMode(mCameraId, true);
  4. 关闭使用:mCameraManager.setTorchMode(mCameraId, false);

代码:

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.首先创建一个具有开关小部件的 XML。然后将其与 Java 连接,使用 onOffSwitch = (Switch) findViewById(R.id.switch1); 2.获取CameraManager,以便您可以管理相机的元素(即闪光灯),使用 mCameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 3.获取当前手机的相机ID,以便您可以指示android指向哪个相机,使用mCameraId = mCameraManager.getCameraIdList()[0]; 4.打开使用:mCameraManager.setTorchMode(mCameraId, true); 5. 关闭使用:mCameraManager.setTorchMode(mCameraId, false);
【解决方案2】:
     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 .

                 }
             }

            });

        }
    }

【讨论】:

  • 我已经上传了我的手电筒应用程序的代码,你能告诉我应该在哪里进行更改
  • 好的。等待。我会帮助。请给我一些时间。
  • 感谢您的帮助我非常感谢您的帮助,但也请告诉我如何在每 1 分钟后生成警报,直到用户按下取消按钮。
  • 请尽快帮忙
  • 我已经编写了一个递归生成的代码,请看一下,当警报框在 1 分钟后第一次打开时,它只给出 1 个错误,之后连续给出 2 个警报框它工作正常,每分钟后只给出 1 个警告框,直到用户按下取消。我正在更新代码
【解决方案3】:

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

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

您可以将其制成一个方法,每次用户确认提示时都会调用该方法。

【讨论】:

    【解决方案4】:

    对于对话框检查this

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

    使用 Handler 一分钟后 Flash Off。

    Handler handler = new Handler();
    
    final Runnable r = new Runnable() {
        public void run() {
           //Turn off flash
        }
    };
    
    handler.postDelayed(r, 1000);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      相关资源
      最近更新 更多