android打开手电筒代码,Android 通用型手电筒代码

前几天这边一个小区断电,黑麻麻的,一只猫闯进寝室,把我吓哭,然后就果断写了个手电筒,下次断电,再来,我要吓死它。

我之前看到很多人都是直接调用闪光灯,其实大部分机型都不支持,我这个是用相机功能来实现的,大部分机型都支持。

MainActivity.class

public class MainActivity extends FragmentActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if (isFlashSupported()) {

if (savedInstanceState == null) {

getSupportFragmentManager().beginTransaction().add(R.id.container, new FlashlightFragment()).commit();

}

} else {

showNoFlashAlert();

}

}

private void showNoFlashAlert() {

new AlertDialog.Builder(this)

.setMessage(R.string.device_not_support_msg)

.setIcon(android.R.drawable.ic_dialog_alert).setTitle(R.string.device_not_support_title)

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

finish();

}

}).create().show();

}

private boolean isFlashSupported() {

PackageManager pm = getPackageManager();

return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);

}

public static class FlashlightFragment extends Fragment implements SurfaceHolder.Callback {

public FlashlightFragment() { }

ImageButton btnSwitch;

ImageView bg;

private boolean isLighOn = false;

private Camera camera;

Camera.Parameters params;

@Override

public void onStart() {

super.onStart();

SurfaceView preview = (SurfaceView) getView().findViewById(R.id.PREVIEW);

SurfaceHolder mHolder = preview.getHolder();

mHolder.addCallback(this);

}

@Override

public void onPause() {

super.onPause();

turnOffFlash();

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_main_activity, container, false);

// flash switch button

btnSwitch = (ImageButton) view.findViewById(R.id.flashlight_button);

bg = (ImageView) view.findViewById(R.id.flashlight_bg);

// displaying button image

toggleBgImage();

// Switch button click event to toggle flash on/off

btnSwitch.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

if (isLighOn) {

turnOffFlash();

} else {

turnOnFlash();

}

}

});

return view;

}

// Turning On flash

private void turnOnFlash() {

if (!isLighOn) {

if (camera == null || params == null) {

return;

}

params = camera.getParameters();

params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);

camera.setParameters(params);

camera.startPreview();

isLighOn = true;

toggleBgImage();

}

}

// Turning Off flash

private void turnOffFlash() {

if (isLighOn) {

if (camera == null || params == null) {

return;

}

params = camera.getParameters();

params.setFlashMode(Camera.Parameters.FLASH_MODE_OFF);

camera.setParameters(params);

camera.stopPreview();

isLighOn = false;

toggleBgImage();

}

}

private void toggleBgImage() {

if (isLighOn) {

bg.setImageResource(R.mipmap.f_on);

} else {

bg.setImageResource(R.mipmap.f_off);

}

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

if (camera != null) {

camera.stopPreview();

camera.setPreviewCallback(null);

camera.release();

camera = null;

}

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

if (camera == null) {

camera = Camera.open();

params = camera.getParameters();

try {

camera.setPreviewDisplay(holder);

} catch (IOException e) {

camera.release();

camera = null;

}

}

turnOnFlash();

}

}

}

fragment_main_activity.xml

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:id="@+id/PREVIEW"

android:layout_width="1dp"

android:layout_height="1dp"/>

android:id="@+id/flashlight_bg"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:src="@mipmap/f_on"

android:scaleType="centerCrop"

/>

android:id="@+id/flashlight_button"

android:layout_width="100dp"

android:layout_height="200dp"

android:layout_centerInParent="true"

android:background="@android:color/transparent"

android:text="fuck"/>

activity_main.xml

android:id="@+id/container"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

AndroidManifest.xml

package="com.liujinghuiuncleapp.app.tool.flashlight" >

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:theme="@style/AppTheme"

android:label="@string/app_name" >

android:name=".MainActivity"

android:label="@string/app_name" >

以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值