diff --git a/.idea/misc.xml b/.idea/misc.xml index af0bbdd..29bb4c5 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3f6203e..9d05413 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,20 +12,15 @@ android:theme="@style/AppTheme"> - - - - - + android:label="@string/app_name" + android:exported="true"> - + - diff --git a/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java b/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java index 34e934d..da9de0c 100644 --- a/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java +++ b/app/src/main/java/com/kinco/MotorApp/BluetoothService/BLEService.java @@ -242,6 +242,9 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { broadcastUpdate(ACTION_GATT_CONNECTED); //得到所有Service List supportedGattServices = gatt.getServices(); + Log.d("ga6tt",supportedGattServices.size()+""); +// supportedGattServices.remove(0); +// supportedGattServices.remove(2); for (BluetoothGattService gattService : supportedGattServices) { //得到每个Service的Characteristics gattCharacteristics = gattService.getCharacteristics(); @@ -265,6 +268,7 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.d(TAG, "gattCharacteristic的属性为: 具备通知属性"); notifyUuid.add(gattCharacteristic.getUuid()); notify_UUID_service = gattService.getUuid(); + notify_UUID_chara = gattCharacteristic.getUuid(); } } @@ -274,6 +278,9 @@ public void onServicesDiscovered(BluetoothGatt gatt, int status) { mBluetoothGatt.setCharacteristicNotification(mBluetoothGatt .getService(notify_UUID_service).getCharacteristic(notify_UUID_chara),true); +// mBluetoothGatt.setCharacteristicNotification(UUID.fromString("00002b13-0000-1000-8000-00805f9b34fb"),true); + + } //调用mBluetoothGatt.readCharacteristic(characteristic)读取数据回调,在这里面接收数据 @@ -329,7 +336,7 @@ public void onCreate() { super.onCreate(); init(); Log.d(TAG,"创建了服务"); -//// //调试用 +// //调试用 // mHandler.postDelayed(new Runnable() { // @Override // public void run() { @@ -348,7 +355,6 @@ public IBinder onBind(Intent intent) { @Override public boolean onUnbind(Intent intent) { - close(); return super.onUnbind(intent); } public void close() { diff --git a/app/src/main/java/com/kinco/MotorApp/MainActivity.java b/app/src/main/java/com/kinco/MotorApp/MainActivity.java index 1959bed..814c999 100644 --- a/app/src/main/java/com/kinco/MotorApp/MainActivity.java +++ b/app/src/main/java/com/kinco/MotorApp/MainActivity.java @@ -3,6 +3,7 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; @@ -32,9 +33,6 @@ import java.util.List; public class MainActivity extends AppCompatActivity { - private TextView textview; - private Button mButton3; - private Button mButton4; private FirstpageFragment firstpageFragment=new FirstpageFragment(); ; private SecondpageFragment secondpageFragment=new SecondpageFragment(); private ThirdpageFragment thirdpageFragment=new ThirdpageFragment(); @@ -83,6 +81,19 @@ protected void onSaveInstanceState(Bundle outState) { } + //返回键不会销毁程序 + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + + if (keyCode == KeyEvent.KEYCODE_BACK) { + Intent home = new Intent(Intent.ACTION_MAIN); + home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + home.addCategory(Intent.CATEGORY_HOME); + startActivity(home); + return true; + } + return super.onKeyDown(keyCode, event); + } @Override @@ -97,7 +108,7 @@ public boolean onOptionsItemSelected(MenuItem item) { } break; case R.id.item01: - Toast.makeText(MyApplication.getContext(),"Coming soon",Toast.LENGTH_SHORT); + Toast.makeText(MainActivity.this,"Coming soon",Toast.LENGTH_SHORT); break; case R.id.item02: Toast.makeText(MyApplication.getContext(),"Coming soon",Toast.LENGTH_SHORT); diff --git a/app/src/main/java/com/kinco/MotorApp/OSCActivity.java b/app/src/main/java/com/kinco/MotorApp/OSCActivity.java deleted file mode 100644 index 06c5eef..0000000 --- a/app/src/main/java/com/kinco/MotorApp/OSCActivity.java +++ /dev/null @@ -1,204 +0,0 @@ -package com.kinco.MotorApp; - -import android.content.res.Resources; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.os.Bundle; -import android.util.DisplayMetrics; -import android.view.SurfaceHolder; -import android.view.SurfaceView; -import android.view.View; -import android.widget.Button; - -import androidx.appcompat.app.AppCompatActivity; - -import com.kinco.MotorApp.R; - -import java.util.Random; -import java.util.Timer; -import java.util.TimerTask; - -public class OSCActivity extends AppCompatActivity implements View.OnClickListener { - private SurfaceHolder holder; - private SurfaceView showSurfaceView; - - private Button btnShowSin; - private Button btnShowCos; - private Button btnShowBrokenLine; - - private Paint paint; - - private int HEIGHT; - // 要绘制的曲线的水平宽度 - private int WIDTH; - // 离屏幕左边界的起始距离 - private final int X_OFFSET = 5; - // 初始化X坐标 - private int cx = X_OFFSET; - // 实际的Y轴的位置 - private int centerY ; - private Timer timer = new Timer(); - private TimerTask task = null; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.osc_page); - // 获得SurfaceView对象 - showSurfaceView = (SurfaceView) findViewById(R.id.showSurfaceView); - btnShowSin = (Button) findViewById(R.id.btnShowSin); - btnShowCos = (Button) findViewById(R.id.btnShowCos); - btnShowBrokenLine = (Button) findViewById(R.id.btnShowBrokenLine); - - btnShowSin.setOnClickListener(this); - btnShowCos.setOnClickListener(this); - btnShowBrokenLine.setOnClickListener(this); - - InitData(); - - // 初始化SurfaceHolder对象 - holder = showSurfaceView.getHolder(); - paint = new Paint(); - paint.setColor(Color.GREEN); - paint.setStrokeWidth(3); - } - - private void InitData() { - Resources resources = this.getResources(); - DisplayMetrics dm = resources.getDisplayMetrics(); - //获取屏幕的宽度作为示波器的边长 - HEIGHT = dm.widthPixels; - WIDTH = dm.widthPixels; - //Y轴的中心就是高的一半 - centerY = HEIGHT / 2; - - } - - @Override - public void onClick(View view) { - switch (view.getId()) { - case R.id.btnShowSin: - showSineCord(view); - break; - case R.id.btnShowCos: - showSineCord(view); - break; - case R.id.btnShowBrokenLine: - showBrokenLine(); - break; - } - - } - - /** - * 折线曲线 - */ - private void showBrokenLine(){ - - drawBackGround(holder); - cx = X_OFFSET; - if (task != null) { - task.cancel(); - } - task = new TimerTask() { - int startX = 0; - int startY = 200; - Random random = new Random(); - @Override - public void run() { - - int cy = random.nextInt(100)+200; - - Canvas canvas = holder.lockCanvas(new Rect(cx-10, cy - 900, - cx + 10, cy + 900)); - - // 根据X,Y坐标画线 - canvas.drawLine(startX, startY ,cx, cy, paint); - - //结束点作为下一次折线的起始点 - startX = cx; - startY = cy; - - cx+=10; - // 超过指定宽度,线程取消,停止画曲线 - if (cx > WIDTH) { - task.cancel(); - task = null; - } - // 提交修改 - holder.unlockCanvasAndPost(canvas); - } - }; - timer.schedule(task, 0, 300); - } - - /** - * 正余弦曲线函数 - */ - private void showSineCord(final View view){ - drawBackGround(holder); - cx = X_OFFSET; - if (task != null) { - task.cancel(); - } - task = new TimerTask() { - - @Override - public void run() { - // 根据是正玄还是余玄和X坐标确定Y坐标 - int cy = view.getId()==R.id.btnShowSin? - centerY- (int) (100 * Math.sin((cx - 5) * 2 * Math.PI/ 150)) - :centerY- (int) (100 * Math.cos((cx - 5) * 2 * Math.PI/ 150)); - - Canvas canvas = holder.lockCanvas(new Rect(cx, cy - 2, - cx + 2, cy + 2)); - // 根据X,Y坐标画点 - canvas.drawPoint(cx, cy, paint); - cx++; - // 超过指定宽度,线程取消,停止画曲线 - if (cx > WIDTH) { - task.cancel(); - task = null; - } - // 提交修改 - holder.unlockCanvasAndPost(canvas); - } - }; - timer.schedule(task, 0, 30); - } - - private void drawBackGround(SurfaceHolder holder) { - Canvas canvas = holder.lockCanvas(); - // 绘制黑色背景 - canvas.drawColor(Color.BLACK); - Paint p = new Paint(); - p.setColor(Color.WHITE); - p.setStrokeWidth(2); - - // 画网格8*8 - Paint mPaint = new Paint(); - mPaint.setColor(Color.GRAY);// 网格为黄色 - mPaint.setStrokeWidth(1);// 设置画笔粗细 - int oldY = 0; - for (int i = 0; i <= 8; i++) {// 绘画横线 - canvas.drawLine(0, oldY, WIDTH, oldY, mPaint); - oldY = oldY + WIDTH/8; - } - int oldX = 0; - for (int i = 0; i <= 8; i++) {// 绘画纵线 - canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint); - oldX = oldX + HEIGHT/8; - } - - // 绘制坐标轴 - canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p); - canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p); - holder.unlockCanvasAndPost(canvas); - holder.lockCanvas(new Rect(0, 0, 0, 0)); - holder.unlockCanvasAndPost(canvas); - } - -} - diff --git a/app/src/main/java/com/kinco/MotorApp/SplashActivity.java b/app/src/main/java/com/kinco/MotorApp/SplashActivity.java index 3c80a01..3b04d5a 100644 --- a/app/src/main/java/com/kinco/MotorApp/SplashActivity.java +++ b/app/src/main/java/com/kinco/MotorApp/SplashActivity.java @@ -9,6 +9,7 @@ import android.view.WindowManager; +import com.kinco.MotorApp.ui.DeviceList; public class SplashActivity extends Activity { @@ -31,6 +32,11 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + //避免重复加载 + if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { + finish(); + return; + } getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏 @@ -65,7 +71,7 @@ public void run() { - Intent it=new Intent(getApplicationContext(),MainActivity.class);//启动MainActivity + Intent it=new Intent(getApplicationContext(), DeviceList.class);//启动MainActivity diff --git a/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java b/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java index 6d65607..650c977 100644 --- a/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java +++ b/app/src/main/java/com/kinco/MotorApp/TabFragmentUtils.java @@ -26,7 +26,7 @@ public TabFragmentUtils(RadioGroup radioGroup, int container, List fra //设置radiobutton的点事件 radioGroup.setOnCheckedChangeListener(this); //默认选择0 页面 - ((RadioButton) radioGroup.getChildAt(0)).setChecked(true); + ((RadioButton) radioGroup.getChildAt(3)).setChecked(true); } public void onCheckedChanged(RadioGroup group, int checkedId) { diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java index 4bf0bce..4a41d7a 100644 --- a/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java +++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/ErrorDialog.java @@ -6,6 +6,9 @@ import com.kinco.MotorApp.util; +/** + * 错误提示框 + */ public class ErrorDialog extends AlertDialog.Builder{ public ErrorDialog(Context context,String text) { super(context); diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java new file mode 100644 index 0000000..11be7b5 --- /dev/null +++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/LoadingDialog.java @@ -0,0 +1,68 @@ +package com.kinco.MotorApp.alertdialog; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; + +import com.kinco.MotorApp.R; +import com.kinco.MotorApp.edittext.TableAdapter; + +import java.lang.reflect.Field; + +public class LoadingDialog { + private View view; + private LayoutInflater inflater; + private TextView textView; + private AlertDialog.Builder builder; + private AlertDialog dialog; + private TableAdapter.ViewHolder holder; + private Field field; + Button btnPos; + Button btnNeg; + public OnClickCancelListener onClickCancelListener; + Context context; + public LoadingDialog(final Context context,String title, String text, boolean cancelable){ + builder = new AlertDialog.Builder(context); + builder.setCancelable(false); + builder.setTitle(title); + inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + view=inflater.inflate(R.layout.loading_layout,null); + textView=(TextView) (view.findViewById(R.id.loadingText)); + textView.setText(text); + builder.setView(view); + + //据实际情况是否要“取消”按钮 + if(cancelable){ + builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + onClickCancelListener.onNegativeClick(); + } + }); + } + dialog = builder.show(); + + } + public interface OnClickCancelListener{ + void onNegativeClick(); + } + + public void setOnClickCancelListener(OnClickCancelListener onClickCancelListener){ + this.onClickCancelListener=onClickCancelListener; + } + + public void show(){ + builder.show(); + } + + public void gone(){ + dialog.dismiss(); + } + +} diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java index bec02a8..8855f3d 100644 --- a/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java +++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/PasswordDialog.java @@ -1,26 +1,20 @@ package com.kinco.MotorApp.alertdialog; import android.app.AlertDialog; -import android.app.DatePickerDialog; -import android.app.Dialog; -import android.bluetooth.BluetoothGatt; + import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; import android.text.InputFilter; import android.text.InputType; -import android.text.TextWatcher; -import android.view.View; import android.widget.Button; import android.widget.EditText; -import android.widget.Toast; - -import com.kinco.MotorApp.BluetoothService.BLEService; - import java.lang.reflect.Field; -//TODO 密码输入框 +/** + * 密码输入框 + */ public class PasswordDialog{ private String password=""; final private AlertDialog.Builder builder; @@ -64,8 +58,8 @@ public void onClick(DialogInterface dialog, int which) { btnNeg = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); btnPos.setText("Connect"); btnNeg.setText("Cancel"); - btnPos.setTextColor(Color.BLUE); - btnNeg.setTextColor(Color.BLUE); + btnPos.setTextColor(Color.RED); + btnNeg.setTextColor(Color.RED); //设置不可消失 try { field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); diff --git a/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java b/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java new file mode 100644 index 0000000..6d2fcab --- /dev/null +++ b/app/src/main/java/com/kinco/MotorApp/alertdialog/SetDataDialog.java @@ -0,0 +1,196 @@ +package com.kinco.MotorApp.alertdialog; + +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.text.InputFilter; +import android.text.InputType; +import android.widget.AbsoluteLayout; +import android.widget.Button; +import android.widget.EditText; + +import android.app.AlertDialog; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.kinco.MotorApp.R; + +import java.lang.reflect.Field; + +public class SetDataDialog { + private String SetData = ""; + private String title; + private String Unit; + final private AlertDialog.Builder builder; + private AlertDialog dialog; + private Field field; + Button btnPos; + Button btnNeg; + public SetDataDialog.OnClickBottomListener onClickBottomListener; + Context context; + + + public SetDataDialog(final Context context,String title,String Unit,String Hint) { + this.context = context; + this.title=title; + this.Unit=Unit; + builder = new AlertDialog.Builder(context); + builder.setCancelable(false); + builder.setTitle(title); +// builder.setMessage("\n"+"Range:" +Hint+"\n"+"Default:" +"\n"+"Current:" ); + final TextView blank= new TextView(context); + blank.setText(""); + final TextView blank1= new TextView(context); + blank1.setText(""); + + final TextView range = new TextView(context); + range.setText(" range: "); + range.setTextSize(17); + final TextView Range = new TextView(context); + Range.setText(Hint); + Range.setTextSize(17); + Range.setTextColor(Color.BLACK); + Range.setBackgroundResource(R.drawable.lin); + + LinearLayout layout1=new LinearLayout(context); + layout1.setOrientation(LinearLayout.HORIZONTAL); + layout1.addView(range); + layout1.addView(Range); + + final TextView default1= new TextView(context); + default1.setText(" default:"); + default1.setTextSize(17); + final TextView Default = new TextView(context); + Default.setText("Default"); + Default.setTextSize(17); + Default.setTextColor(Color.BLACK); + Default.setBackgroundResource(R.drawable.lin); + + LinearLayout layout2=new LinearLayout(context); + layout2.setOrientation(LinearLayout.HORIZONTAL); + layout2.addView(default1); + layout2.addView(Default); + + final TextView current = new TextView(context); + current.setText(" current:"); + current.setTextSize(17); + final TextView Current = new TextView(context); + Current.setText("Current"); + Current.setTextSize(17); + Current.setTextColor(Color.BLACK); + Current.setBackgroundResource(R.drawable.lin); + + LinearLayout layout3=new LinearLayout(context); + layout3.setOrientation(LinearLayout.HORIZONTAL); + layout3.addView(current); + layout3.addView(Current); + + final TextView input = new TextView(context); + input.setText(" input:"); + input.setTextSize(17); + final EditText edit = new EditText(context); + edit.setFocusable(true); + edit.setFocusableInTouchMode(true); + edit.setInputType(InputType.TYPE_CLASS_NUMBER); + edit.setFilters(new InputFilter[]{new InputFilter.LengthFilter(400000)}); + edit.setHint("SetData"); + final TextView unit = new TextView(context); + unit.setText(Unit); + unit.setTextSize(17); + unit.setTextColor(Color.BLACK); + LinearLayout layout4=new LinearLayout(context); + layout4.setOrientation(LinearLayout.HORIZONTAL); + layout4.addView(input); + layout4.addView(edit); + layout4.addView(unit); + + LinearLayout layout0=new LinearLayout(context); + layout0.setOrientation(LinearLayout.VERTICAL); + layout0.addView(layout1); + layout0.addView(blank); + layout0.addView(layout2); + layout0.addView(blank1); + layout0.addView(layout3); + layout0.addView(layout4); + + builder.setView(layout0); + + builder.setPositiveButton("set", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + SetData = edit.getText().toString(); + onClickBottomListener.onPositiveClick(); + + } + }); + + builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + onClickBottomListener.onNegativeClick(); + } + }); + + dialog = builder.show(); + btnPos = dialog.getButton(DialogInterface.BUTTON_POSITIVE); + btnNeg = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); + btnPos.setText("Set"); + btnNeg.setText("Cancel"); + btnPos.setTextColor(Color.RED); + btnNeg.setTextColor(Color.RED); + //设置不可消失 + try { + field = dialog.getClass().getSuperclass().getDeclaredField("mShowing"); + field.setAccessible(true); + field.set(dialog, false); + } catch (Exception e) { + ErrorDialog errorDialog = new ErrorDialog(context, e.toString()); + errorDialog.show(); + } + + } + + public interface OnClickBottomListener { + void onPositiveClick(); + + void onNegativeClick(); + } + + /** + * 提供给外界设置监听接口的方法 + * + * @param onClickBottomListener + * @return + */ + public SetDataDialog setOnClickBottomListener(SetDataDialog.OnClickBottomListener onClickBottomListener) { + this.onClickBottomListener = onClickBottomListener; + return this; + } + + /** + * 展示dialog + */ + public void show() { + builder.show(); + } + + /** + * 取消dialog + */ + public void gone() { + try { + field.set(dialog, true); + dialog.dismiss(); + } catch (Exception e) { + ErrorDialog errorDialog = new ErrorDialog(context, e.toString()); + errorDialog.show(); + } + } + + ; + + public String getSetData() { + return SetData; + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java b/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java index 2ffc916..18fadaf 100644 --- a/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java +++ b/app/src/main/java/com/kinco/MotorApp/edittext/ListViewAdapter.java @@ -34,7 +34,7 @@ public class ListViewAdapter extends BaseAdapter { public interface AddressNoListener{ - void clickListener(String Sth,String value); //确定传出的值 + void clickListener(String Sth,String value,String name,String Unit,String Hint); //确定传出的值 } // public AddressNoListener getAddressNoListener(){return addressNoListener;} public void setAddressNoListener(ListViewAdapter.AddressNoListener addressNoListener) @@ -78,7 +78,7 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.edit_current.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ - addressNoListener.clickListener(itemObj.getAddress(),itemObj.getText()); + addressNoListener.clickListener(itemObj.getAddress(),itemObj.getText(),itemObj.getName(),itemObj.getUnit(),itemObj.getHint()); } }); convertView.setTag(holder); @@ -134,10 +134,10 @@ private class ViewHolder { public TextView edit_name; public Button edit_current; public TextView edit_unit; - private EditText editText;//1 + private TextView editText;//1 public ViewHolder(View convertView) { - editText = (EditText) convertView.findViewById(R.id.edit_text); + editText = (TextView) convertView.findViewById(R.id.edit_text); } } diff --git a/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java b/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java index 8d289c1..d89ec0c 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/DeviceList.java @@ -34,6 +34,8 @@ import android.widget.Toast; import com.kinco.MotorApp.BluetoothService.BLEService; +import com.kinco.MotorApp.MainActivity; +import com.kinco.MotorApp.alertdialog.LoadingDialog; import com.kinco.MotorApp.alertdialog.PasswordDialog; import com.kinco.MotorApp.util; import com.kinco.MotorApp.R; @@ -58,7 +60,8 @@ public class DeviceList extends AppCompatActivity{ private Button BLEScan; private Switch Filter; private PasswordDialog dialog; - private String password=""; + private LoadingDialog loadingDialog; + private boolean firstTime; private boolean mScanning;//是否正在搜索 private Handler mHandler; private TextView count; @@ -71,7 +74,7 @@ public class DeviceList extends AppCompatActivity{ ArrayList connected_list = new ArrayList(); private LocalReceiver localReceiver; private BLEService mBluetoothLeService; - private String editPassword; + private String editPassword=""; private void initUI(){ setContentView(R.layout.device_list); @@ -131,7 +134,7 @@ public void onClick(View v) { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); -// try { + try { initUI(); getBlePermissionFromSys(); Intent BLEIntent = new Intent(this, BLEService.class); @@ -140,6 +143,9 @@ protected void onCreate(Bundle savedInstanceState){ localReceiver = new LocalReceiver(); localBroadcastManager = LocalBroadcastManager.getInstance(this); localBroadcastManager.registerReceiver(localReceiver, util.makeGattUpdateIntentFilter()); + }catch (Exception e){ + Log.d(TAG,e.toString()); + } } @Override protected void onDestroy(){ @@ -173,9 +179,13 @@ public void onItemClick(AdapterView adapterView, connected_list.clear(); mPairedDevicesArrayAdapter.notifyDataSetChanged(); } - Toast toast = Toast.makeText(DeviceList.this,"Connecting...please wait", Toast.LENGTH_SHORT); - toast.setGravity(Gravity.CENTER,0,0); - toast.show(); + loadingDialog = new LoadingDialog(DeviceList.this,"","Connecting...please wait",true); + loadingDialog.setOnClickCancelListener(new LoadingDialog.OnClickCancelListener(){ + public void onNegativeClick(){ + loadingDialog.gone(); + mBluetoothLeService.close(); + } + }); mBluetoothLeService.connect(address); } @@ -242,19 +252,23 @@ public void run() { toast.setGravity(Gravity.CENTER,0,0); toast.show(); mBluetoothLeService.slaveAddress = slaveAddress; - try { - mBluetoothLeService.slaveCode = util.intToByte2(Integer.valueOf(slaveAddress.substring(slaveAddress.indexOf("_") + 1, slaveAddress.indexOf("\n"))))[1]; - Log.d(TAG,slaveAddress.substring(slaveAddress.indexOf("_")+1,slaveAddress.indexOf("\n"))); - connected_list.clear(); - connected_list.add(slaveAddress); - mPairedDevicesArrayAdapter.notifyDataSetChanged(); - showPasswordDialog(); - //finish(); - }catch(Exception e){ - util.centerToast(DeviceList.this,"Failed to get SlaveAddress",0); - e.printStackTrace(); - Log.d(TAG,e.toString()); - } +// try { +// loadingDialog.gone(); +// mBluetoothLeService.slaveCode = util.intToByte2(Integer.valueOf(slaveAddress.substring(slaveAddress.indexOf("_") + 1, slaveAddress.indexOf("\n"))))[1]; +// Log.d(TAG,slaveAddress.substring(slaveAddress.indexOf("_")+1,slaveAddress.indexOf("\n"))); +// connected_list.clear(); +// connected_list.add(slaveAddress); +// mPairedDevicesArrayAdapter.notifyDataSetChanged(); +// showPasswordDialog(); +// +// +// +// }catch(Exception e){ +// util.centerToast(DeviceList.this,"Failed to get SlaveAddress",0); +// e.printStackTrace(); +// Log.d(TAG,e.toString()); +// } + debug(); } }); @@ -262,6 +276,8 @@ public void run() { } else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)){ + if(!(loadingDialog==null)) + loadingDialog.gone(); Toast toast = Toast.makeText(getApplicationContext(),"Connection failed!",Toast.LENGTH_SHORT); toast.setGravity(Gravity.CENTER,0,0); toast.show(); @@ -277,6 +293,8 @@ else if(action.equals(BLEService.ACTION_DATA_AVAILABLE)){ if (!(dialog == null)) { util.centerToast(DeviceList.this, "Correct!", 0); dialog.gone(); + Intent activityIntent = new Intent(DeviceList.this, MainActivity.class); + startActivity(activityIntent); finish(); } }else @@ -317,25 +335,17 @@ public void onNegativeClick() { } }); - //dialog.show(); -// final PasswordDialog dialog = new PasswordDialog(DeviceList.this, mBluetoothLeService); -// dd = dialog.show(); -// field = dd.getClass().getSuperclass().getDeclaredField("mShowing"); -// mHandler.postDelayed(new Runnable() { -// @Override -// public void run() { -// try { -// if (password.equals(dialog.getPassword())) -// field.set(dd, true); -// }catch (Exception e){} -// } -// },1000); -// field.setAccessible(true); -// field.set(dd, false);// false表示不关闭 }catch(Exception e){ Log.d(TAG,"PasswordDialog error"); } } + private void debug(){ + mBluetoothLeService.slaveCode=0x05; + Intent activityIntent = new Intent(DeviceList.this, MainActivity.class); + startActivity(activityIntent); + finish(); + } + } diff --git a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java index d5184e7..e03dbba 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstMoreActivity.java @@ -10,6 +10,7 @@ import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.widget.Button; @@ -20,6 +21,7 @@ import com.kinco.MotorApp.BluetoothService.BLEService; import com.kinco.MotorApp.alertdialog.ErrorDialog; +import com.kinco.MotorApp.alertdialog.SetDataDialog; import com.kinco.MotorApp.edittext.ItemBean; import com.kinco.MotorApp.edittext.ListViewAdapter; import com.kinco.MotorApp.edittext.Text; @@ -30,6 +32,8 @@ import java.util.ArrayList; import java.util.List; +import static androidx.constraintlayout.widget.Constraints.TAG; + public class FirstMoreActivity extends Activity implements View.OnClickListener { @@ -255,7 +259,8 @@ public class FirstMoreActivity extends Activity implements View.OnClickListener private ListViewAdapter mAdapter; private List mData; private BLEService mBluetoothLeService; - + private SetDataDialog setDatadialog; + private String editSetData=""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.setting_2); @@ -270,8 +275,10 @@ public void onCreate(Bundle savedInstanceState) { mAdapter = new ListViewAdapter(this, mData); mAdapter.setAddressNoListener(new ListViewAdapter.AddressNoListener() { @Override - public void clickListener(String address, String value) { + public void clickListener(String address, String value,String name,String Unit,String Hint) { mBluetoothLeService.writeData(address,value); +// Toast.makeText(FirstMoreActivity.this,name, Toast.LENGTH_SHORT).show(); + showSetDataDialog(name,Unit,Hint); } }); mListView.setAdapter(mAdapter); @@ -316,6 +323,27 @@ public void clickListener(String address, String value) { button20.setOnClickListener(this); } + + private void showSetDataDialog(String title,String Unit,String Hint){ + try { + setDatadialog = new SetDataDialog(this,title,Unit,Hint); + setDatadialog.setOnClickBottomListener(new SetDataDialog.OnClickBottomListener(){ + @Override + public void onPositiveClick() { + editSetData = setDatadialog.getSetData(); + } + @Override + public void onNegativeClick() { + setDatadialog.gone(); + + } + }); + }catch(Exception e){ + Log.d(TAG,"SetDataDialog error"); + } + + } + private void initService(){ //绑定服务 Intent BLEIntent = new Intent(this, BLEService.class); diff --git a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java index a7c86ee..01f2f25 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/firstpage/FirstpageFragment.java @@ -1,8 +1,5 @@ package com.kinco.MotorApp.ui.firstpage; - -import android.app.AlertDialog; -import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -27,6 +24,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import com.kinco.MotorApp.DemoFragment; +import com.kinco.MotorApp.alertdialog.SetDataDialog; import com.kinco.MotorApp.edittext.ItemBean; import com.kinco.MotorApp.edittext.ListViewAdapter; import com.kinco.MotorApp.edittext.Text; @@ -54,6 +52,8 @@ public class FirstpageFragment extends Fragment implements View.OnClickListener private BLEService mBluetoothLeService; private LocalBroadcastManager localBroadcastManager; private BroadcastReceiver receiver=new LocalReceiver(); + private SetDataDialog setDatadialog; + private String editSetData=""; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -63,7 +63,6 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - initService(); show(); //输入型 mListView = (ListView) getActivity().findViewById(R.id.list_view0); @@ -72,8 +71,9 @@ public void onActivityCreated(Bundle savedInstanceState) { mAdapter = new ListViewAdapter(this.getActivity(), mData); mAdapter.setAddressNoListener(new ListViewAdapter.AddressNoListener() { @Override - public void clickListener(String address, String value) { + public void clickListener(String address, String value,String name,String Unit,String Hint) { mBluetoothLeService.writeData(address,value); + showSetDataDialog(); } }); mListView.setAdapter(mAdapter); @@ -104,7 +104,8 @@ private void initService(){ Intent BLEIntent = new Intent(getActivity(),BLEService.class); getActivity().bindService(BLEIntent,connection, Context.BIND_AUTO_CREATE); localBroadcastManager = LocalBroadcastManager.getInstance(getContext()); - localBroadcastManager.registerReceiver(receiver,util.makeGattUpdateIntentFilter()); + //if(!util.isRegister(localBroadcastManager,BLEService.ACTION_DATA_AVAILABLE)) + localBroadcastManager.registerReceiver(receiver,util.makeGattUpdateIntentFilter()); } private void show() { List texts = new ArrayList(); @@ -130,7 +131,25 @@ public void addressNo(int addressNo) { }); listView = (ListView) getActivity().findViewById(R.id.mylist0); listView.setAdapter(textAdapter);//传值到ListView中 - util.setListViewHeightBasedOnChildren(listView); + //util.setListViewHeightBasedOnChildren(listView); + } + } + private void showSetDataDialog(){ + try { + setDatadialog = new SetDataDialog(this.getActivity(),"Digital reference frequency","HZ","0.0~300.00"); + setDatadialog.setOnClickBottomListener(new SetDataDialog.OnClickBottomListener(){ + @Override + public void onPositiveClick() { + editSetData = setDatadialog.getSetData(); + } + @Override + public void onNegativeClick() { + setDatadialog.gone(); + + } + }); + }catch(Exception e){ + Log.d(TAG,"SetDataDialog error"); } } @@ -188,9 +207,17 @@ public void onServiceDisconnected(ComponentName name) { }; @Override - public void onPause() { - super.onPause(); - localBroadcastManager.unregisterReceiver(receiver); + public void onStart() { + super.onStart(); + initService(); + util.centerToast(getContext(),"1被开启",0); + } + + @Override + public void onStop() { + super.onStop(); + if(!(localBroadcastManager==null)) + localBroadcastManager.unregisterReceiver(receiver); } public FirstpageFragment newInstance(int i) { diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java new file mode 100644 index 0000000..d2a1644 --- /dev/null +++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/DragImage.java @@ -0,0 +1,180 @@ +package com.kinco.MotorApp.ui.fourthpage; + +import android.content.Context; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Point; +import android.graphics.Rect; +import android.graphics.Bitmap; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; + +import com.kinco.MotorApp.R; +import com.kinco.MotorApp.util; + + +class DragImage extends SurfaceView implements SurfaceHolder.Callback, View.OnTouchListener, ScaleGestureDetector.OnScaleGestureListener { + private Context context; + private SurfaceHolder holder; + private Bitmap icon; + private Paint paint; + private boolean running=true; + private float scale; + private float preScale = 1;// 默认前一次缩放比例为1 + ScaleGestureDetector dd; + + public DragImage(Context context) { + super(context); + this.context=context; + holder = this.getHolder();//获取holder + holder.addCallback(this); + this.setOnTouchListener(this); + dd = new ScaleGestureDetector(context,this); + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + + icon = BitmapFactory.decodeResource(context.getResources(),R.mipmap.ic_launcher_foreground); + paint=new Paint(); + running=true; + // new Thread(this).start(); + + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + } + + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + running=false; + } + + @Override + public boolean onScale(ScaleGestureDetector detector) { + + float previousSpan = detector.getPreviousSpan(); + float currentSpan = detector.getCurrentSpan(); + if (currentSpan < previousSpan) { + // 缩小 + //scale = preScale-detector.getScaleFactor(); + scale = preScale - (previousSpan - currentSpan) / 500; + } else { + // 放大 + scale = preScale+detector.getScaleFactor()/3; + //scale = preScale + (currentSpan - previousSpan) / 1000; + } + + + + return false; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + Matrix mMatrix = new Matrix(); + mMatrix.setScale(scale, scale); + // 锁定整个SurfaceView + Canvas mCanvas = holder.lockCanvas(); + // 清屏 + mCanvas.drawColor(Color.BLACK); + // 画缩放后的图 + mCanvas.drawBitmap(icon, mMatrix, null); + // 绘制完成,提交修改 + holder.unlockCanvasAndPost(mCanvas); + // 重新锁一次 + holder.lockCanvas(new Rect(0, 0, 0, 0)); + holder.unlockCanvasAndPost(mCanvas); + util.centerToast(context,scale+"",0); + preScale = scale; + } + + + //@Override + public void run() { + int SLEEP_TIME=100; + while (running) { + //开始画的时间 long start=System.currentTimeMillis(); +// Canvas canvas = holder.lockCanvas();//获取画布 +// canvas.drawColor(Color.GREEN); +// canvas.drawBitmap(icon, rect.left,rect.top,null); +// holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 + //结束的时间 long end=System.currentTimeMillis(); + } + } + + // Region region=new Region(); + private Point point=new Point();//点击点 + private Rect rect=new Rect(0,0,400,1000);//图片的rect + private boolean canDrag=false;//判断是否点击在图片上,否则拖动无效 + private int offsetX=0,offsetY=0;//点击点离图片左上角的距离 + @Override + public boolean onTouch(View v, MotionEvent event) { + dd.onTouchEvent(event); + return true; + // TODO Auto-generated method stub +// switch (event.getAction()) { +// +// //手按下的时候 +// case MotionEvent.ACTION_DOWN: +// point.x=(int)event.getX(); +// point.y=(int)event.getY(); +// if(rect.contains(point.x, point.y)){ +// canDrag=true; +// offsetX=point.x-rect.left; +// offsetY=point.y-rect.top; +// } +// +// break; +// +// //移动的时候 +// case MotionEvent.ACTION_MOVE: +// if(canDrag){ +// rect.left=(int)event.getX()-offsetX; +// rect.top=(int)event.getY()-offsetY; +// rect.right=rect.left+icon.getWidth(); +// rect.bottom=rect.top+icon.getHeight(); +// if (rect.left < 0) { +// rect.left = 0; +// rect.right = rect.left+icon.getWidth(); +// } +// if (rect.right > getMeasuredWidth()) { +// rect.right = getMeasuredWidth(); +// rect.left = rect.right-icon.getWidth(); +// } +// if (rect.top < 0) { +// rect.top = 0; +// rect.bottom = rect.top+icon.getHeight(); +// } +// if (rect.bottom > getMeasuredHeight()) { +// rect.bottom = getMeasuredHeight(); +// rect.top = rect.bottom-icon.getHeight(); +// } +// } +// break; +// case MotionEvent.ACTION_UP: +// canDrag=false; +// break; +// +// default: +// break; +// } +// return true; + } + + } + diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java index c7fc2c6..6f68668 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/FourthpageFragment.java @@ -10,6 +10,9 @@ import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; +import android.graphics.Matrix; +import android.graphics.PointF; +import android.graphics.Bitmap; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; @@ -17,12 +20,16 @@ import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.widget.Button; +import android.widget.Spinner; import android.widget.Toast; +import android.widget.ImageView; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; @@ -30,9 +37,8 @@ import com.kinco.MotorApp.BluetoothService.BLEService; import com.kinco.MotorApp.R; -import com.kinco.MotorApp.ui.firstpage.FirstpageFragment; +import com.kinco.MotorApp.alertdialog.ErrorDialog; import com.kinco.MotorApp.util; -import com.kinco.MotorApp.ui.thirdpage.ThirdpageFragment; import java.util.ArrayList; import java.util.Iterator; @@ -41,14 +47,14 @@ import java.util.TimerTask; public class FourthpageFragment extends Fragment implements View.OnClickListener{ - private String TAG="ff"; + private String TAG = "fourth"; + private View view;//得到碎片对应的布局文件,方便后续使用 private SurfaceHolder holder; - private SurfaceView showSurfaceView; + private MySurfaceView3 showSurfaceView; //按钮 - private Button btnShowSin; - private Button btnShowCos; private Button btnShowBrokenLine; + private Spinner spinner; private Paint paint; @@ -56,11 +62,11 @@ public class FourthpageFragment extends Fragment implements View.OnClickListener // 要绘制的曲线的水平宽度 private int WIDTH; // 离屏幕左边界的起始距离 - private final int X_OFFSET = 5; + private final int X_OFFSET = 2; // 初始化X坐标 private int cx = X_OFFSET; // 实际的Y轴的位置 - private int centerY ; + private float centerY ; private Timer timer = new Timer(); private TimerTask task = null; private int packageCount=0; @@ -70,32 +76,46 @@ public class FourthpageFragment extends Fragment implements View.OnClickListener private boolean mDrawing=false; private Handler mHnadler; private int data[] = new int[1024]; + private String[] addressList = {"0204","0202","0203"}; private ArrayList packageList = new ArrayList(); + private float maxData = 0; + private float minData=0; + private float average = 0; + //记住一定要重写onCreateView方法 @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.osc_page, container, false);//得到对应的布局文件 return view; + //DragImage dragImage = new DragImage(getContext()); + //return dragImage; } + + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - initService(); + // 获得SurfaceView对象 - showSurfaceView = (SurfaceView) getActivity().findViewById(R.id.showSurfaceView); - btnShowSin = (Button) getActivity().findViewById(R.id.btnShowSin); - btnShowCos = (Button) getActivity().findViewById(R.id.btnShowCos); + showSurfaceView = (MySurfaceView3)getActivity().findViewById(R.id.MySV3); + showSurfaceView.post(new Runnable() { + @Override + public void run() { + int width = showSurfaceView.getWidth(); + int height = showSurfaceView.getHeight(); + Log.i(TAG, "showSurfaceView Height is " + height + ", Width is " + width); + } + }); btnShowBrokenLine = (Button) getActivity().findViewById(R.id.btnShowBrokenLine); - - btnShowSin.setOnClickListener(this); - btnShowCos.setOnClickListener(this); btnShowBrokenLine.setOnClickListener(this); + spinner = getActivity().findViewById(R.id.OSCspinner); InitData(); - // 初始化SurfaceHolder对象 - holder = showSurfaceView.getHolder(); + // 初始化SurfaceHolder对象,被获取后会被锁住 + //holder = showSurfaceView.getHolder(); + paint = new Paint(); paint.setColor(Color.GREEN); paint.setStrokeWidth(3); @@ -103,6 +123,7 @@ public void onActivityCreated(Bundle savedInstanceState) { mHnadler=new Handler(); + } @Override @@ -112,18 +133,27 @@ public void onStop() { task.cancel(); task=null; } + localBroadcastManager.unregisterReceiver(receiver); } + @Override - public void onPause() { - super.onPause(); - localBroadcastManager.unregisterReceiver(receiver); + public void onStart() { + super.onStart(); + initService(); + util.centerToast(getContext(),"4被开启",0); +// mHnadler.postDelayed(new Runnable() { +// @Override +// public void run() { +// drawBackGround(holder); +// } +// },300); } @Override public void onResume() { super.onResume(); - localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter()); + Log.d("fourth","真实的高:"+showSurfaceView.getMeasuredHeight()); } private void InitData() { @@ -131,7 +161,10 @@ private void InitData() { DisplayMetrics dm = resources.getDisplayMetrics(); //获取屏幕的宽度作为示波器的边长 HEIGHT = dm.widthPixels; +// HEIGHT = dm.heightPixels; WIDTH = dm.widthPixels; + + Log.d(TAG,showSurfaceView.getHeight()+" "+showSurfaceView.getWidth()); //Y轴的中心就是高的一半 centerY = HEIGHT / 2; @@ -140,23 +173,10 @@ private void InitData() { @Override public void onClick(View view) { switch (view.getId()) { - case R.id.btnShowSin: - mBluetoothLeService.writeData("0202","0001"); - packageCount=0; - packageList.clear(); - mDrawing=true; - - break; - case R.id.btnShowCos: - //showSineCord(view); - mBluetoothLeService.writeData("0203","0001"); - packageCount=0; - packageList.clear(); - mDrawing=true; - break; case R.id.btnShowBrokenLine: //showBrokenLine(); - mBluetoothLeService.writeData("0204","0001"); + testRandomDraw(); + //mBluetoothLeService.writeData(addressList[spinner.getSelectedItemPosition()],"0001"); packageCount=0; packageList.clear(); mDrawing=true; @@ -209,40 +229,6 @@ public void run() { timer.schedule(task, 0, 300); } - /** - * 正余弦曲线函数 - */ - private void showSineCord(final View view){ - drawBackGround(holder); - cx = X_OFFSET; - if (task != null) { - task.cancel(); - } - task = new TimerTask() { - - @Override - public void run() { - // 根据是正玄还是余玄和X坐标确定Y坐标 - int cy = view.getId()==R.id.btnShowSin? - centerY- (int) (100 * Math.sin((cx - 5) * 2 * Math.PI/ 150)) - :centerY- (int) (100 * Math.cos((cx - 5) * 2 * Math.PI/ 150)); - - Canvas canvas = holder.lockCanvas(new Rect(cx, cy - 2, - cx + 2, cy + 2)); - // 根据X,Y坐标画点 - canvas.drawPoint(cx, cy, paint); - cx++; - // 超过指定宽度,线程取消,停止画曲线 - if (cx > WIDTH) { - task.cancel(); - task = null; - } - // 提交修改 - holder.unlockCanvasAndPost(canvas); - } - }; - timer.schedule(task, 0, 30); - } private void drawBackGround(SurfaceHolder holder) { Canvas canvas = holder.lockCanvas(); @@ -250,23 +236,35 @@ private void drawBackGround(SurfaceHolder holder) { canvas.drawColor(Color.BLACK); Paint p = new Paint(); p.setColor(Color.WHITE); - p.setStrokeWidth(2); + p.setStrokeWidth(5); // 画网格8*8 Paint mPaint = new Paint(); - mPaint.setColor(Color.GRAY);// 网格为黄色 - mPaint.setStrokeWidth(1);// 设置画笔粗细 + mPaint.setTextSize(50); + mPaint.setColor(Color.GRAY);// 网格为灰色 + mPaint.setStrokeWidth(3);// 设置画笔粗细 int oldY = 0; for (int i = 0; i <= 8; i++) {// 绘画横线 canvas.drawLine(0, oldY, WIDTH, oldY, mPaint); - oldY = oldY + WIDTH/8; + if(spinner.getSelectedItemPosition()==0) { + if (i != 4) + canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, mPaint); + }else + canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, mPaint); + oldY = oldY + WIDTH / 8; + } int oldX = 0; for (int i = 0; i <= 8; i++) {// 绘画纵线 canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint); - oldX = oldX + HEIGHT/8; + if(i%2==0) + canvas.drawText(oldX+"",oldX+10,centerY+40,mPaint); + oldX = oldX + WIDTH/8; + } + + // 绘制坐标轴 canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p); canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p); @@ -275,6 +273,44 @@ private void drawBackGround(SurfaceHolder holder) { holder.unlockCanvasAndPost(canvas); } + private void drawBackGround(Canvas canvas,int scale) { + // 绘制黑色背景 + canvas.drawColor(Color.BLACK); + Paint p = new Paint(); + p.setColor(Color.WHITE); + p.setStrokeWidth(5); + p.setTextSize(50); + + // 画网格8*8 + Paint mPaint = new Paint(); + mPaint.setTextSize(50); + mPaint.setColor(Color.GRAY);// 网格为灰色 + mPaint.setStrokeWidth(3);// 设置画笔粗细 + int oldY = 0; + for (int i = 0; i <= 8; i++) {// 绘画横线 + canvas.drawLine(0, oldY, WIDTH, oldY, mPaint); + if(spinner.getSelectedItemPosition()==0) { + if (i != 4) + canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, p); + }else + canvas.drawText(maxData / 4 * (4 - i) + "", 10, oldY, p); + oldY = oldY + WIDTH / 8; + + } + int oldX = 0; + for (int i = 0; i <= 8*scale; i++) {// 绘画纵线 + canvas.drawLine(oldX, 0, oldX, HEIGHT, mPaint); + if(i%2==0) + canvas.drawText(oldX+"",oldX+10,centerY+40,mPaint); + oldX = oldX + WIDTH/8; + + } + + // 绘制坐标轴 + canvas.drawLine(X_OFFSET, centerY, WIDTH, centerY, p); + canvas.drawLine(X_OFFSET, 40, X_OFFSET, HEIGHT, p); + } + public FourthpageFragment newInstance(int i) { Bundle args = new Bundle(); args.putInt("int", i); @@ -294,28 +330,96 @@ private void initService(){ localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter()); } + void testRandomDraw(){ + Bitmap whiteBgBitmap = Bitmap.createBitmap(WIDTH*5,HEIGHT*5, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + int scale=5; + drawBackGround(canvas,scale); + Paint mpaint = new Paint(); + mpaint.setColor(Color.GREEN); + mpaint.setStrokeWidth(3); + int data[] = createRandomData(); + float oldY=0; + float oldX=0; + float cx = 0; + for(int i=0;i<1024;i++) { + cx+=5; + canvas.drawLine(oldX,oldY+10,cx,data[i]+10,mpaint); + oldX=cx; + oldY = data[i]; + } + showSurfaceView.setBitmap(whiteBgBitmap); + } + + void testDraw(){ + maxData=0; + final Iterator data=packageToData(packageList).iterator();//这里面会更新maxData + Bitmap whiteBgBitmap = Bitmap.createBitmap(WIDTH*5,HEIGHT, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(whiteBgBitmap); + drawBackGround(canvas,1); + Paint mpaint = new Paint(); + mpaint.setColor(Color.GREEN); + mpaint.setStrokeWidth(3); + float oldY=0; + float oldX=0; + float cx = 0; + while(data.hasNext()){ + float cy = centerY-(data.next()/maxData)*centerY; + //Log.d(TAG,"这是cy:"+cy+""); + canvas.drawLine(oldX,oldY+5,cx,cy+5,mpaint); + oldX = cx; + cx+=5; + oldY = cy; + } + + canvas.drawBitmap(whiteBgBitmap,0,0,null); + showSurfaceView.setBitmap(whiteBgBitmap); + + } + + /** + * 生成随机数据数组用于测试 + * @return + */ + int[] createRandomData(){ + int []data = new int[1024]; + Random random = new Random(); + for(int i=0;i<1024;i++) + data[i] = random.nextInt(500); + return data; + } private void draw(){ - drawBackGround(holder); + maxData=0; + final Iterator data=packageToData(packageList).iterator();//这里面会更新maxData + drawBackGround(holder); cx = X_OFFSET; if (task != null) { task.cancel(); } - final Iterator data=packageToData(packageList).iterator(); task = new TimerTask() { int startX = 0; - int startY = centerY; + float startY = centerY; + Bitmap mbmpTest = Bitmap.createBitmap(WIDTH,HEIGHT, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(mbmpTest); @Override public void run() { + if(!data.hasNext()){ task.cancel(); task = null; + Canvas cv = holder.lockCanvas(); + cv.drawBitmap(mbmpTest,10,10,null); + holder.unlockCanvasAndPost(cv); + return; } - int cy = centerY-data.next(); + float cy = 10;//centerY-(data.next()/maxData)*centerY; // Log.d(TAG,cy+""); - Canvas canvas = holder.lockCanvas(new Rect(cx-10, cy - 900, - cx + 10, cy + 900)); +// Canvas canvas = holder.lockCanvas(new Rect(cx-1, (int)cy - 900, +// cx + 1, (int)cy + 900)); + + // 根据X,Y坐标画线 canvas.drawLine(startX, startY ,cx, cy, paint); @@ -324,31 +428,68 @@ public void run() { startX = cx; startY = cy; - cx+=10; + cx+=1; // 超过指定宽度,线程取消,停止画曲线 if (cx > WIDTH) { task.cancel(); task = null; } // 提交修改 - holder.unlockCanvasAndPost(canvas); + // holder.unlockCanvasAndPost(canvas); } }; - timer.schedule(task, 0, 30); + timer.schedule(task, 0, 5); } - private ArrayList packageToData(ArrayList packageList){ - ArrayList data = new ArrayList<>(); + /** + * 剔除应答报文并将数据包转为可用数据 + * @param packageList + * @return + */ + private ArrayList packageToData(ArrayList packageList){ + ArrayList data = new ArrayList<>(); byte[] package1 = new byte[12]; - System.arraycopy(packageList.get(0), 8, package1, 0, 12); + try { + System.arraycopy(packageList.get(0), 8, package1, 0, 12); + }catch(Exception e){ + ErrorDialog ed = new ErrorDialog(getContext(),""); + ed.show(); + Log.d(TAG,e.toString()); + } + for(byte i: package1) Log.d(TAG,i+""); packageList.set(0,package1); + float current; for(byte[] i:packageList){ for(int j=0; jmaxData?current:maxData; + minData = current maxData ? current : maxData; + data.add(current); + }break; + case 2:{ + current=util.byte2ToUnsignedShort(i[j], i[j + 1])/10; + maxData = current > maxData ? current : maxData; + data.add(current); + }break; + } + } } + average = (maxData-minData)/2; + Log.d(TAG,"data长度"+data.size()); +// for(float i: data){ +// Log.d(TAG,i+""); +// } return data; } @@ -364,12 +505,13 @@ public void onReceive(Context context, Intent intent) { if (mDrawing) { byte[] message = intent.getByteArrayExtra(BLEService.EXTRA_MESSAGE_DATA); packageList.add(message); - if(packageCount==102) - draw(); + Log.d(TAG,util.toHexString(message,true)+"\n"+packageCount+""); + if(packageCount==102){//102 + //draw(); + testDraw(); + } packageCount++; - Log.d("ff",util.toHexString(message,true)+"\n"+packageCount+""); - //final int info = Integer.valueOf(message.substring(9, 11)) + Integer.valueOf(message.substring(12, 14)) * 256; } } else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)) { diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java new file mode 100644 index 0000000..f24cf2c --- /dev/null +++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/MySurfaceView3.java @@ -0,0 +1,280 @@ +package com.kinco.MotorApp.ui.fourthpage; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.PointF; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.SurfaceHolder; +import android.view.SurfaceView; +import android.view.View; +import android.graphics.Rect; +import android.graphics.Bitmap; + + + +public class MySurfaceView3 extends SurfaceView implements + SurfaceHolder.Callback, View.OnTouchListener { + + private static final int NONE = 0;// 原始 + private static final int DRAG = 1;// 拖动 + private static final int ZOOM = 2;// 放大 + private int mStatus = NONE; + + private static final float MAX_ZOOM_SCALE = 4.0f; + private static final float MIN_ZOOM_SCALE = 1.0f; + private static final float FLOAT_TYPE = 1.0f; + private float mCurrentMaxScale = MAX_ZOOM_SCALE; + private float mCurrentScale = 1.0f; + + private Rect mRectSrc = new Rect(); // used for render image. + private Rect mRectDes = new Rect(); // used for store size of monitor. + + private int mCenterX, mCenterY; + int mSurfaceHeight, mSurfaceWidth, mImageHeight, mImageWidth; + + private PointF mStartPoint = new PointF(); + private float mStartDistance = 0f; + + private SurfaceHolder mSurHolder = null; + private Bitmap mBitmap; + + public MySurfaceView3(Context context, AttributeSet attrs) { + super(context,attrs); + mSurHolder = getHolder(); + mSurHolder.addCallback(this); + this.setOnTouchListener(this); + + } + + private void init() { + mCurrentMaxScale = Math.max( + MIN_ZOOM_SCALE, + 4 * Math.min(FLOAT_TYPE * mImageHeight / mSurfaceHeight, 1.0f + * mImageWidth / mSurfaceWidth)); + mCurrentScale = MIN_ZOOM_SCALE; + mCenterX = mImageWidth / 2; + mCenterY = mImageHeight / 2; + calcRect(); + + } + + private void adjustCenter() { + int w = mRectSrc.right - mRectSrc.left; + int h = mRectSrc.bottom - mRectSrc.top; + + if (mCenterX - w / 2 < 0) { + mCenterX = w / 2; + mRectSrc.left = 0; + mRectSrc.right = w; + } else if (mCenterX + w / 2 >= mImageWidth) { + mCenterX = mImageWidth - w / 2; + mRectSrc.right = mImageWidth; + mRectSrc.left = mRectSrc.right - w; + + } else { + mRectSrc.left = mCenterX - w / 2; + mRectSrc.right = mRectSrc.left + w; + } + + if (mCenterY - h / 2 < 0) { + mCenterY = h / 2; + mRectSrc.top = 0; + mRectSrc.bottom = h; + } else if (mCenterY + h / 2 >= mImageHeight) { + mCenterY = mImageHeight - h / 2; + mRectSrc.bottom = mImageHeight; + mRectSrc.top = mRectSrc.bottom - h; + } else { + mRectSrc.top = mCenterY - h / 2; + mRectSrc.bottom = mRectSrc.top + h; + } + Log.d("fourth","在计算中心"); + + } + + private void calcRect() { + int w, h; + float imageRatio, surfaceRatio; + imageRatio = FLOAT_TYPE * mImageWidth / mImageHeight; + surfaceRatio = FLOAT_TYPE * mSurfaceWidth / mSurfaceHeight; + + if (imageRatio < surfaceRatio) { + h = mSurfaceHeight; + w = (int) (h * imageRatio); + } else { + w = mSurfaceWidth; + h = (int) (w / imageRatio); + } + + if (mCurrentScale > MIN_ZOOM_SCALE) { + w = Math.min(mSurfaceWidth, (int) (w * mCurrentScale)); + h = Math.min(mSurfaceHeight, (int) (h * mCurrentScale)); + } else { + mCurrentScale = MIN_ZOOM_SCALE; + } + + mRectDes.left = (mSurfaceWidth - w) / 2; + mRectDes.top = (mSurfaceHeight - h) / 2; + mRectDes.right = mRectDes.left + w; + mRectDes.bottom = mRectDes.top + h; + + float curImageRatio = FLOAT_TYPE * w / h; + int h2, w2; + if (curImageRatio > imageRatio) { + h2 = (int) (mImageHeight / mCurrentScale); + w2 = (int) (h2 * curImageRatio); + } else { + + w2 = (int) (mImageWidth / mCurrentScale); + h2 = (int) (w2 / curImageRatio); + } + mRectSrc.left = mCenterX - w2 / 2; + mRectSrc.top = mCenterY - h2 / 2; + mRectSrc.right = mRectSrc.left + w2; + mRectSrc.bottom = mRectSrc.top + h2; + } + + public void setMaxZoom(float value) { + mCurrentMaxScale = value; + } + + public void setBitmap(Bitmap b) { + + if (b == null) { + return; + } + synchronized (MySurfaceView3.class) { + mBitmap = b; + if (mImageHeight != mBitmap.getHeight() + || mImageWidth != mBitmap.getWidth()) { + mImageHeight = mBitmap.getHeight(); + mImageWidth = mBitmap.getWidth(); + init(); + } + showBitmap(); + } + + } + + private void showBitmap() { + synchronized (MySurfaceView3.class) { + Canvas c = getHolder().lockCanvas(); + if (c != null && mBitmap != null) { + c.drawColor(Color.GRAY); + c.drawBitmap(mBitmap, mRectSrc, mRectDes, null); + getHolder().unlockCanvasAndPost(c); + } + } + } + + private void dragAction(MotionEvent event) { + + synchronized (MySurfaceView3.class) { + PointF currentPoint = new PointF(); + currentPoint.set(event.getX(), event.getY()); + int offsetX = (int) currentPoint.x - (int) mStartPoint.x; + int offsetY = (int) currentPoint.y - (int) mStartPoint.y; + mStartPoint = currentPoint; + + mCenterX -= offsetX; + mCenterY -= offsetY; + + adjustCenter(); + showBitmap(); + } + } + + private void zoomAcition(MotionEvent event) { + + synchronized (MySurfaceView3.class) { + + float newDist = spacing(event); + float scale = newDist / mStartDistance; + mStartDistance = newDist; + + mCurrentScale *= scale; + mCurrentScale = Math.max(FLOAT_TYPE, + Math.min(mCurrentScale, mCurrentMaxScale)); + + calcRect(); + adjustCenter(); + showBitmap(); + + } + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + mStartPoint.set(event.getX(), event.getY()); + mStatus = DRAG; + break; + + case MotionEvent.ACTION_POINTER_DOWN: + float distance = spacing(event); + if (distance > 10f) { + + mStatus = ZOOM; + mStartDistance = distance; + } + + break; + + case MotionEvent.ACTION_MOVE: + if (mStatus == DRAG) { + dragAction(event); + } else { + + if (event.getPointerCount() == 1) + return true; + zoomAcition(event); + } + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + mStatus = NONE; + break; + default: + break; + } + + return true; + } + + private float spacing(MotionEvent event) { + float x = event.getX(0) - event.getX(1); + float y = event.getY(0) - event.getY(1); + return (float) Math.sqrt(x * x + y * y); + } + + @Override + public void surfaceCreated(SurfaceHolder holder) { + // TODO Auto-generated method stub + } + + // 初始化 + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + + synchronized (MySurfaceView3.class) { + mRectDes.set(0, 0, width, height); + mSurfaceHeight = height; + mSurfaceWidth = width; + init(); + if (mBitmap != null) { + showBitmap(); + } + } + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java new file mode 100644 index 0000000..cd85ee9 --- /dev/null +++ b/app/src/main/java/com/kinco/MotorApp/ui/fourthpage/function.java @@ -0,0 +1,69 @@ +package com.kinco.MotorApp.ui.fourthpage; + +public class function { +} +// showSurfaceView.setOnTouchListener(new View.OnTouchListener() +// { +// +// @Override +// public boolean onTouch(View view, MotionEvent event) { +// SurfaceView imageView = (SurfaceView) view; +// switch (event.getAction()&MotionEvent.ACTION_MASK) { +// case MotionEvent.ACTION_DOWN: +// savedMatrix.set(matrix); +// start.set(event.getX(), event.getY()); +// mode = MOVE; +// rotate = NONE; +// break; +// case MotionEvent.ACTION_UP: +// case MotionEvent.ACTION_POINTER_UP: +// mode = NONE; +// break; +// case MotionEvent.ACTION_POINTER_DOWN: +// oldDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1))); +// if (oldDistance > 10f) { +// savedMatrix.set(matrix); +// mid.set((event.getX(0)+event.getX(1))/2, (event.getY(0)+event.getY(1))/2); +// mode = ZOOM; +// } +// case MotionEvent.ACTION_MOVE: +// if (mode == MOVE) +// { +// if(rotate == NONE) { +// savedMatrix.set(matrix); +// mid.set(event.getX(), event.getY()); +// rotate = ROTATION; +// } +// else { +// matrix.set(savedMatrix); +// double a = Math.atan((mid.y-start.y)/(mid.x-start.x)); +// double b = Math.atan((event.getY()-mid.y)/(event.getX()-mid.x)); +// if ((b - a < Math.PI/2 && b - a > Math.PI / 18)||((b + Math.PI) % Math.PI - a < Math.PI/2 && (b + Math.PI) % Math.PI - a > Math.PI / 18)) { +// matrix.postScale((float)0.9, (float)0.9); +// } +// else if ((a - b < Math.PI / 2 && a - b > Math.PI / 18)||((a + Math.PI) % Math.PI - b < Math.PI/2 && (a + Math.PI) % Math.PI - b > Math.PI / 18)) { +// matrix.postScale((float)1.1, (float)1.1); +// } +// start.set(event.getX(), event.getY()); +// rotate = NONE; +// } +// } +// else if(mode == ZOOM) +// { +// float newDistance; +// newDistance = (float)Math.sqrt((event.getX(0)-event.getX(1))*(event.getX(0)-event.getX(1))+(event.getY(0)-event.getY(1))*(event.getY(0)-event.getY(1))); +// if(newDistance > 10f) { +// matrix.set(savedMatrix); +// matrix.postScale(newDistance/oldDistance, newDistance/oldDistance, mid.x, mid.y); +// oldDistance = newDistance; +// savedMatrix.set(matrix); +// } +// } +// break; +// } +// imageView. +// imageView.setImageMatrix(matrix); +// return true; +// } +// +// }); \ No newline at end of file diff --git a/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java index eebb208..d295c60 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/secondpage/SecondpageFragment.java @@ -85,30 +85,21 @@ public void onActivityCreated(Bundle savedInstanceState) { private void initService(){ //绑定服务 Intent BLEIntent = new Intent(getActivity(), BLEService.class); - getActivity().bindService(BLEIntent,new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - mBluetoothLeService = ((BLEService.localBinder) service) - .getService(); - } - @Override - public void onServiceDisconnected(ComponentName name) { - } - }, Context.BIND_AUTO_CREATE); + getActivity().bindService(BLEIntent,connection, Context.BIND_AUTO_CREATE); localBroadcastManager = LocalBroadcastManager.getInstance(getContext()); localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter()); } @Override - public void onResume() { - super.onResume(); + public void onStart() { + super.onStart(); initService(); } @Override - public void onPause() { - super.onPause(); -// localBroadcastManager.unregisterReceiver(receiver); + public void onStop() { + super.onStop(); + localBroadcastManager.unregisterReceiver(receiver); } public SecondpageFragment newInstance(int i) { @@ -156,7 +147,6 @@ public void run() { addressState = "0101"; adapter.notifyDataSetChanged(); delayRead(addressState); - mBluetoothLeService.readData(addressState,"0001"); return; } if (addressState.equals("0101")) { @@ -239,4 +229,19 @@ public void run() { } },1000); } + /** + * 得到服务实例 + */ + private ServiceConnection connection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + mBluetoothLeService = ((BLEService.localBinder) service) + .getService(); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + + } + }; } \ No newline at end of file diff --git a/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java b/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java index 83d47ca..b44bc10 100644 --- a/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java +++ b/app/src/main/java/com/kinco/MotorApp/ui/thirdpage/ThirdpageFragment.java @@ -62,34 +62,26 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initUI(); - initService(); } @Override - public void onResume() { - super.onResume(); - localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter()); + public void onStart() { + super.onStart(); + initService(); + //util.centerToast(getContext(),"3的服务被开启",0); } @Override - public void onPause() { - super.onPause(); + public void onStop() { + super.onStop(); localBroadcastManager.unregisterReceiver(receiver); + //util.centerToast(getContext(),"我被停啦",0); } private void initService(){ //绑定服务 Intent BLEIntent = new Intent(getActivity(), BLEService.class); - getActivity().bindService(BLEIntent,new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName name, IBinder service) { - mBluetoothLeService = ((BLEService.localBinder) service) - .getService(); - } - @Override - public void onServiceDisconnected(ComponentName name) { - } - }, Context.BIND_AUTO_CREATE); + getActivity().bindService(BLEIntent,connection,Context.BIND_AUTO_CREATE); localBroadcastManager =LocalBroadcastManager.getInstance(getContext()); localBroadcastManager.registerReceiver(receiver, util.makeGattUpdateIntentFilter()); } @@ -159,7 +151,7 @@ public void onReceive(Context context, Intent intent) { if(state.equals("read")) currentValue.setText(util.toHexString(message,3)); if(state.equals("write")) - util.centerToast(context,"succeed!",Toast.LENGTH_SHORT); + util.centerToast(context,"succeed!!!",Toast.LENGTH_SHORT); } else if(action.equals(BLEService.ACTION_GATT_DISCONNECTED)) { @@ -174,4 +166,20 @@ else if(action.equals(BLEService.ACTION_ERROR_CODE)) { } } } + + /** + * 得到服务实例 + */ + private ServiceConnection connection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + mBluetoothLeService = ((BLEService.localBinder) service) + .getService(); + } + + @Override + public void onServiceDisconnected(ComponentName name) { + + } + }; } \ No newline at end of file diff --git a/app/src/main/java/com/kinco/MotorApp/util.java b/app/src/main/java/com/kinco/MotorApp/util.java index afa6bdf..6f31411 100644 --- a/app/src/main/java/com/kinco/MotorApp/util.java +++ b/app/src/main/java/com/kinco/MotorApp/util.java @@ -11,6 +11,8 @@ import android.widget.ListAdapter; import android.widget.ListView; import android.widget.Toast; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import android.content.BroadcastReceiver; import com.kinco.MotorApp.BluetoothService.BLEService; @@ -19,6 +21,9 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; /** * @author: Nicholas @@ -201,5 +206,38 @@ public static void saveLog(Context context,String filename,String str){ } } + public static boolean isRegister(LocalBroadcastManager manager,String action) { + boolean isRegister = false; + try { + Field mReceiversField = manager.getClass().getDeclaredField("mReceivers"); + mReceiversField.setAccessible(true); +// String name = mReceiversField.getName(); + HashMap> mReceivers = (HashMap>) mReceiversField.get(manager); + + for (BroadcastReceiver key : mReceivers.keySet()) { + ArrayList intentFilters = mReceivers.get(key); +// MyLogUtil.e("Key: " + key + " Value: " + intentFilters); + for (int i = 0; i < intentFilters.size(); i++) { + IntentFilter intentFilter = (IntentFilter) intentFilters.get(i); + Field mActionsField = intentFilter.getClass().getDeclaredField("mActions"); + mActionsField.setAccessible(true); + ArrayList mActions = (ArrayList) mActionsField.get(intentFilter); + for (int j = 0; j < mActions.size(); j++) { + if (mActions.get(i).equals(action)) { + isRegister = true; + break; + } + } + } + } + + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return isRegister; + } + } diff --git a/app/src/main/res/color/color_radiobutton.xml b/app/src/main/res/color/color_radiobutton.xml index 88ec0e7..55f46d2 100644 --- a/app/src/main/res/color/color_radiobutton.xml +++ b/app/src/main/res/color/color_radiobutton.xml @@ -1,6 +1,6 @@ - - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_edittext.xml b/app/src/main/res/layout/item_edittext.xml index e8933f4..ffe54b4 100644 --- a/app/src/main/res/layout/item_edittext.xml +++ b/app/src/main/res/layout/item_edittext.xml @@ -55,7 +55,7 @@ - + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/osc_page.xml b/app/src/main/res/layout/osc_page.xml index eaddf43..fce2da7 100644 --- a/app/src/main/res/layout/osc_page.xml +++ b/app/src/main/res/layout/osc_page.xml @@ -15,39 +15,32 @@ android:gravity="center_horizontal" android:orientation="horizontal" > -