package com.desk.move.point.service;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.Toast;
import com.desk.move.point.R;
import com.desk.move.point.domian.PointViewRemind;
import com.desk.move.point.utils.DimMeasureUtils;
import com.desk.move.point.utils.LoclScreenUtils;
import com.desk.move.point.utils.ScreenSizeUtils;
import com.desk.move.point.utils.VirbriateUtils;
import com.desk.move.point.view.MovePoint;
public class PointView extends Service {
private WindowManager mWM;
private WindowManager.LayoutParams params;
private View view;
private ImageView ig;
private int igDp = 10;
private MovePoint movepoint;
private MyHandler myHandler;
private ScreenSizeUtils screenSize;
private int screenHeight,screenWidth;
private DimMeasureUtils dim;
Context context;
//灯
private boolean firstOpen = true;
private Camera camera = null;
private Parameters one = null;
//锁屏
private LoclScreenUtils lock;
private void openLight(){
if(one == null){
one = camera.getParameters();
}
List<String> list = one.getSupportedFlashModes();
if(firstOpen){
firstOpen = false;
one.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(one);
}
if (list.contains(Parameters.FLASH_MODE_TORCH)||list.contains(Parameters.FLASH_MODE_OFF)) {
if(one.getFlashMode()== Parameters.FLASH_MODE_OFF){
one.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(one);
camera.startPreview();
}else if(one.getFlashMode()== Parameters.FLASH_MODE_TORCH){
one.setFlashMode(Parameters.FLASH_MODE_OFF);
camera.setParameters(one);
camera.stopPreview();
}
} else {
Toast.makeText(getApplicationContext(), "此设备不支持闪光灯模式",
Toast.LENGTH_SHORT).show();
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
context = PointView.this;
dim = new DimMeasureUtils(context);
myHandler = new MyHandler();
camera = Camera.open();
lock = LoclScreenUtils.getInstance();
Log.e("show"," show");
showToast();
Log.e("show1"," show1");
//Toast.makeText(PointView.this, "开启", Toast.LENGTH_SHORT).show();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (mWM != null && view != null) {
mWM.removeView(view);// 从window中移除view
view = null;
}
if (null != camera) {
camera.release();
camera = null;
}
}
/**
* 自定义归属地浮窗
*/
private void showToast() {
mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
screenSize = new ScreenSizeUtils(mWM);
screenHeight = screenSize.getHeight();
screenWidth = screenSize.getWidth();
//Toast.makeText(PointView.this, "width"+screenWidth+"height"+screenHeight, Toast.LENGTH_SHORT).show();
params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
params.type = WindowManager.LayoutParams.TYPE_TOAST;
params.gravity = Gravity.TOP+Gravity.LEFT;
params.setTitle("Toast");
// view = new TextView(this);
view = View.inflate(this,R.layout.move_view, null);
movepoint = (MovePoint)view.findViewById(R.id.move_point);
params.x = screenWidth -movepoint.getSize() ;
params.y = screenHeight/2;
ig = (ImageView)view.findViewById(R.id.move_bian);
ig.setVisibility(View.GONE);
ig.setOnClickListener(new ClickMe());
movepoint.setPointViewRemind(new PointRemind());
mWM.addView(view, params);// 将view添加在屏幕上(Window)
}
class ClickMe implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
VirbriateUtils.virbate(context);
params.x = screenWidth-movepoint.getSize();
movepoint.setVisibility(View.VISIBLE);
ig.setVisibility(View.GONE);
mWM.updateViewLayout(view, params);
}
}
class PointRemind implements PointViewRemind{
@Override
public void up(MovePoint point) {
// TODO Auto-generated method stub
VirbriateUtils.virbateOne(context);
openLight();
}
@Override
public void down(MovePoint point) {
// TODO Auto-generated method stub
VirbriateUtils.virbateOne(context);
lock.initDevice(context);
lock.lockScreen(context);
}
@Override
public void left(MovePoint point) {
// TODO Auto-generated method stub
//VirbriateUtils.virbateOne(context);
}
@Override
public void right(MovePoint point) {
// TODO Auto-generated method stub
//VirbriateUtils.virbateOne(context);
}
@Override
public void enterLongPress(MovePoint point) {
// TODO Auto-generated method stub
VirbriateUtils.virbate(context);
}
@Override
public void getXYShow(int x, int y) {
// TODO Auto-generated method stub
sendMessgae(0,x,y);
}
}
private void sendMessgae(int what,int x,int y){
Message msg = new Message();
msg.what = what;
Bundle bd = new Bundle();
bd.putInt("x", x);
bd.putInt("y", y);
msg.setData(bd);
myHandler.sendMessage(msg);
}
@SuppressLint("HandlerLeak")
class MyHandler extends Handler{
public void handleMessage(Message msg){
switch(msg.what){
case 0:
Bundle bd = msg.getData();
int x = bd.getInt("x");
int y = bd.getInt("y");
//show.setText("x="+x+","+"y="+y+","+"left"+myPoint.getLeft());
params.x = x;
params.y = y;
if(x<0){
params.x = 0;
}
if(y<0){
params.y = 0;
}
if(x>screenWidth-movepoint.getSize()){
//params.x = screenWidth-movepoint.getSize();
params.x = screenWidth-dim.dpToPx(igDp);
movepoint.setVisibility(View.GONE);
ig.setVisibility(View.VISIBLE);
}
if(y>screenHeight-movepoint.getSize()){
params.y = screenHeight-movepoint.getSize();
}
mWM.updateViewLayout(view, params);
//myPoint.setLayoutParams(lp);
break;
}
}
}
}
|
|