implementation 'androidx.appcompat:appcompat:1.1.0' | implementation 'androidx.appcompat:appcompat:1.1.0' | ||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | implementation 'androidx.constraintlayout:constraintlayout:1.1.3' | ||||
testImplementation 'junit:junit:4.12' | testImplementation 'junit:junit:4.12' | ||||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.8.0'//蓝牙核心库 | |||||
implementation 'com.github.elinkthings:AILinkSDKRepositoryAndroid:1.8.2'//蓝牙核心库 | |||||
implementation 'com.github.elinkthings:AILinkSDKOtaLibraryAndroid:1.0.3'//OTA库,需要依赖核心库 | implementation 'com.github.elinkthings:AILinkSDKOtaLibraryAndroid:1.0.3'//OTA库,需要依赖核心库 | ||||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.5.7'//解析库,需要依赖核心库 | |||||
implementation 'com.github.elinkthings:AILinkSDKParsingLibraryAndroid:1.6.1'//解析库,需要依赖核心库 | |||||
implementation 'androidx.recyclerview:recyclerview:1.1.0' | implementation 'androidx.recyclerview:recyclerview:1.1.0' | ||||
implementation 'com.jakewharton:butterknife:10.2.0' | implementation 'com.jakewharton:butterknife:10.2.0' | ||||
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' | annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.0' | ||||
api 'com.squareup.retrofit2:converter-gson:2.5.0' | |||||
} | } | ||||
<activity android:name=".BroadcastBloodOxygenActivity" /> | <activity android:name=".BroadcastBloodOxygenActivity" /> | ||||
<activity android:name=".SmartMaskActivity" /> | <activity android:name=".SmartMaskActivity" /> | ||||
<activity android:name=".ToothBrushWifiBleActivity" /> | <activity android:name=".ToothBrushWifiBleActivity" /> | ||||
<activity android:name=".HeightWeightScaleActivity" /> | |||||
<activity android:name=".RopeSkippingActivity" /> | |||||
<service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer"/> | <service android:name="com.pingwang.bluetoothlib.server.ELinkBleServer"/> | ||||
</application> | </application> |
if (bleDevice != null) { | if (bleDevice != null) { | ||||
HeightBodyFatBleData.init(bleDevice); | HeightBodyFatBleData.init(bleDevice); | ||||
HeightBodyFatBleData.getInstance().setOnHeightBodyFatDataCallback(this); | HeightBodyFatBleData.getInstance().setOnHeightBodyFatDataCallback(this); | ||||
HeightBodyFatBleData.getInstance().setOnHeightBodyFatDataCallback(this); | |||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void onScanning(BleValueBean data) { | public void onScanning(BleValueBean data) { | ||||
if (data.getMac().equalsIgnoreCase(mAddress)){ | |||||
connectBle(data.getMac()); | |||||
} | |||||
} | } | ||||
if (mac.equals(mAddress)) { | if (mac.equals(mAddress)) { | ||||
logList.add(0, "连接已经断开"); | logList.add(0, "连接已经断开"); | ||||
listAdapter.notifyDataSetChanged(); | listAdapter.notifyDataSetChanged(); | ||||
startScanBle(0); | |||||
} | } | ||||
@Override | @Override | ||||
public void onServicesDiscovered(String mac) { | public void onServicesDiscovered(String mac) { | ||||
BleDevice bleDevice = mBluetoothService.getBleDevice(mAddress); | |||||
if (bleDevice != null) { | |||||
HeightBodyFatBleData.init(bleDevice); | |||||
HeightBodyFatBleData.getInstance().setOnHeightBodyFatDataCallback(this); | |||||
} | |||||
} | } | ||||
mList.add(findViewById(R.id.btn_food_temp)); | mList.add(findViewById(R.id.btn_food_temp)); | ||||
mList.add(findViewById(R.id.btn_temp_humidity)); | mList.add(findViewById(R.id.btn_temp_humidity)); | ||||
mList.add(findViewById(R.id.btn_share_condom)); | mList.add(findViewById(R.id.btn_share_condom)); | ||||
mList.add(findViewById(R.id.btn_rope_skip)); | |||||
for (View view : mList) { | for (View view : mList) { | ||||
view.setOnClickListener(listener); | view.setOnClickListener(listener); | ||||
} | } | ||||
case R.id.btn_temp_humidity: | case R.id.btn_temp_humidity: | ||||
type= BleDeviceConfig.TEMP_Humidity; | type= BleDeviceConfig.TEMP_Humidity; | ||||
break; | break; | ||||
case R.id.btn_rope_skip: | |||||
type=BleDeviceConfig.ROPE_SKIPPING; | |||||
break; | |||||
} | } | ||||
startActivity(type); | startActivity(type); |
package aicare.net.cn.sdk.ailinksdkdemoandroid; | |||||
import android.os.Bundle; | |||||
import android.view.View; | |||||
import android.widget.ArrayAdapter; | |||||
import android.widget.ListView; | |||||
import androidx.annotation.Nullable; | |||||
import com.google.gson.Gson; | |||||
import com.pingwang.bluetoothlib.device.BleDevice; | |||||
import com.pingwang.bluetoothlib.listener.OnCallbackBle; | |||||
import java.util.ArrayList; | |||||
import java.util.List; | |||||
import aicare.net.cn.sdk.ailinksdkdemoandroid.base.BleBaseActivity; | |||||
import cn.net.aicare.modulelibrary.module.RopeSkipping.OnRopeSkipCallBack; | |||||
import cn.net.aicare.modulelibrary.module.RopeSkipping.RopeSkipRecord; | |||||
import cn.net.aicare.modulelibrary.module.RopeSkipping.RopeSkippingBleData; | |||||
public class RopeSkippingActivity extends BleBaseActivity implements View.OnClickListener, OnCallbackBle, OnRopeSkipCallBack { | |||||
private List<String> logList; | |||||
private ArrayAdapter mArrayAdapter; | |||||
private ListView listviw; | |||||
private String mAddress; | |||||
private boolean isPauseLog = false; | |||||
@Override | |||||
public void onServiceSuccess() { | |||||
mBluetoothService.setOnCallback(this); | |||||
logList.add("绑定服务成功"); | |||||
if (mBluetoothService != null) { | |||||
mBluetoothService.setOnCallback(this); | |||||
BleDevice bleDevice = mBluetoothService.getBleDevice(mAddress); | |||||
if (bleDevice != null) { | |||||
RopeSkippingBleData.init(bleDevice); | |||||
RopeSkippingBleData.getInstance().setOnRopeSkipCallBack(this); | |||||
} | |||||
} | |||||
} | |||||
@Override | |||||
public void onServiceErr() { | |||||
if (mArrayAdapter != null && logList != null) { | |||||
refreshLog("绑定服务失败"); | |||||
} | |||||
} | |||||
@Override | |||||
public void unbindServices() { | |||||
if (mArrayAdapter != null && logList != null) { | |||||
refreshLog("解除绑定服务"); | |||||
} | |||||
} | |||||
@Override | |||||
protected void onCreate(@Nullable Bundle savedInstanceState) { | |||||
super.onCreate(savedInstanceState); | |||||
mAddress = getIntent().getStringExtra("mac"); | |||||
setContentView(R.layout.activity_rope_skipping); | |||||
listviw = findViewById(R.id.listview); | |||||
findViewById(R.id.btn_syn_time).setOnClickListener(this); | |||||
findViewById(R.id.btn_free_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_time_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_num_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_stop_free_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_stop_time_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_stop_num_jump).setOnClickListener(this); | |||||
findViewById(R.id.btn_get_history).setOnClickListener(this); | |||||
findViewById(R.id.btn_clear_log).setOnClickListener(this); | |||||
findViewById(R.id.btn_default_timer).setOnClickListener(this); | |||||
findViewById(R.id.btn_default_num).setOnClickListener(this); | |||||
findViewById(R.id.btn_bind).setOnClickListener(this); | |||||
logList = new ArrayList<>(); | |||||
mArrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, logList); | |||||
listviw.setAdapter(mArrayAdapter); | |||||
} | |||||
@Override | |||||
public void onClick(View v) { | |||||
if (v.getId() == R.id.btn_syn_time) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().synTime(System.currentTimeMillis()); | |||||
} | |||||
refreshLog("同步时间搓"); | |||||
} else if (v.getId() == R.id.btn_free_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(1, 1); | |||||
} | |||||
refreshLog("启动自由跳绳"); | |||||
} else if (v.getId() == R.id.btn_time_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(2, 1); | |||||
} | |||||
refreshLog("启动倒计时跳绳"); | |||||
} else if (v.getId() == R.id.btn_num_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(3, 1); | |||||
} | |||||
refreshLog("启动倒计数跳绳绳"); | |||||
} else if (v.getId() == R.id.btn_clear_log) { | |||||
if (!isPauseLog) { | |||||
isPauseLog = true; | |||||
} else { | |||||
isPauseLog = false; | |||||
} | |||||
} else if (v.getId() == R.id.btn_stop_free_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(1, 0); | |||||
} | |||||
refreshLog("结束自由跳绳"); | |||||
} else if (v.getId() == R.id.btn_stop_time_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(2, 0); | |||||
} | |||||
refreshLog("结束倒计时跳绳"); | |||||
} else if (v.getId() == R.id.btn_stop_num_jump) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().startOrStopMode(3, 0); | |||||
} | |||||
refreshLog("结束倒计数跳绳绳"); | |||||
} else if (v.getId() == R.id.btn_default_num) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().setCountDownNum(50); | |||||
} | |||||
refreshLog("默认倒计数100"); | |||||
} else if (v.getId() == R.id.btn_default_timer) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().setTimerNum(120); | |||||
} | |||||
refreshLog("默认倒计时60"); | |||||
} else if (v.getId() == R.id.btn_get_history) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().offlineHistory(1); | |||||
} | |||||
refreshLog("获取离线记录"); | |||||
} else if (v.getId() == R.id.btn_bind) { | |||||
if (RopeSkippingBleData.getInstance() != null) { | |||||
RopeSkippingBleData.getInstance().questBind(); | |||||
} | |||||
refreshLog("请按确认按钮"); | |||||
} | |||||
} | |||||
private void refreshLog(String content) { | |||||
if (!isPauseLog) { | |||||
logList.add(content); | |||||
mArrayAdapter.notifyDataSetChanged(); | |||||
} | |||||
} | |||||
@Override | |||||
public void onFinish(RopeSkipRecord ropeSkipBean) { | |||||
refreshLog("跳绳结束" + "\n" + ropeSkipBean.toString() + " \n绊绳=" + new Gson().toJson(ropeSkipBean.getStopDetail())); | |||||
} | |||||
@Override | |||||
public void onBattery(int battery) { | |||||
} | |||||
@Override | |||||
public void onCurrentData(int status, int mode, int defaultValue, int currentJumpNum, int currentJumpTime, int batter) { | |||||
refreshLog("实时数据 \n" + "状态: " + status + " ( 0:准备 1:进行中 2:完成) \n" + "模式: " | |||||
+ mode + " (1:自由 2:倒计时 3:倒计数) \n" | |||||
+ "默认值: " + defaultValue + " 电量 " + batter + "\n 当前个数: " + currentJumpNum + " 时间 " + currentJumpTime); | |||||
} | |||||
@Override | |||||
public void onResultTimerAndCountDownNum(int mode, int timer) { | |||||
if (mode == 2) { | |||||
refreshLog("设置默认时间:" + timer); | |||||
} else if (mode == 3) { | |||||
refreshLog("设置默认个数:" + timer); | |||||
} | |||||
} | |||||
@Override | |||||
public void onResultStatus(int mode, int result) { | |||||
refreshLog("模式: " + mode + " (1:自由 2:倒计时 3:倒计数)" + "结果: " + result + "0:成功 1:失败 2:不支持"); | |||||
} | |||||
@Override | |||||
public void onBindResult(int result) { | |||||
refreshLog("确认绑定结果: " + result + " 0 : 成功 1 :失败 2 不支持"); | |||||
} | |||||
@Override | |||||
public void onFinishOffHistory(List<RopeSkipRecord> list) { | |||||
if (list == null) { | |||||
refreshLog("没有离线记录"); | |||||
} else { | |||||
refreshLog("离线记录:\n" + new Gson().toJson(list)); | |||||
} | |||||
} | |||||
@Override | |||||
public void finish() { | |||||
super.finish(); | |||||
if (mBluetoothService != null) | |||||
mBluetoothService.disconnectAll(); | |||||
} | |||||
} |
case BleDeviceConfig.TEMP_Humidity: | case BleDeviceConfig.TEMP_Humidity: | ||||
intent.setClass(ShowBleActivity.this, TempHumidityActivity.class); | intent.setClass(ShowBleActivity.this, TempHumidityActivity.class); | ||||
break; | break; | ||||
case BleDeviceConfig.ROPE_SKIPPING: | |||||
intent.setClass(ShowBleActivity.this, RopeSkippingActivity.class); | |||||
break; | |||||
// case BleDeviceConfig.BLD_WEIGHT: | // case BleDeviceConfig.BLD_WEIGHT: | ||||
// intent.setClass(ShowBleActivity.this, BLDWeightScaleBle.class); | // intent.setClass(ShowBleActivity.this, BLDWeightScaleBle.class); | ||||
// break; | // break; |
mMHandler.sendEmptyMessage(ConnectWifi); | mMHandler.sendEmptyMessage(ConnectWifi); | ||||
} | } | ||||
} | } | ||||
if (type == CmdConfig.DISORCONNECTWIFI) { | |||||
if (type == CmdConfig.DISCONNECT_WIFI) { | |||||
mList.add(0, "发起连接 " + status); | mList.add(0, "发起连接 " + status); | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } |
} | } | ||||
@Override | @Override | ||||
public void showdata(String data) { | |||||
public void showdata(String data, int type) { | |||||
mlogList.add(0, "收 payload数据"+ TimeUtils.getTime()+data); | mlogList.add(0, "收 payload数据"+ TimeUtils.getTime()+data); | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@Override | @Override | ||||
public void onSupportUnit(List<SupportUnitBean> list) { | public void onSupportUnit(List<SupportUnitBean> list) { | ||||
} | } | ||||
@Override | |||||
public void onSetPortStatus(int status) { | |||||
} | |||||
@Override | @Override | ||||
public void onSetIpUrlStatus(int status) { | public void onSetIpUrlStatus(int status) { | ||||
} | } | ||||
@Override | |||||
public void onIpData(String ip) { | |||||
} | |||||
@Override | |||||
public void onPortData(int port) { | |||||
} | |||||
@Override | |||||
public void onUrlData(String url) { | |||||
} | |||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { |
private MHandler mMHandler; | private MHandler mMHandler; | ||||
private EditText mEditText; | private EditText mEditText; | ||||
private RadioButton kg, jing, stlb, lb; | private RadioButton kg, jing, stlb, lb; | ||||
private byte[] testIp = new byte[]{0x74, | |||||
0x65, 0x73, 0x74, 0x2e, | |||||
0x61, 0x69, 0x6c, 0x69, | |||||
0x6e, 0x6b, 0x2e, 0x72, | |||||
0x65, 0x76, 0x69, 0x63, | |||||
0x65, 0x2e, 0x61, 0x69, | |||||
0x63, 0x61, 0x72, 0x65, | |||||
0x2e, 0x6e, 0x65, 0x74, | |||||
0x2e, 0x63, 0x6e}; | |||||
private byte[] productIp = new byte[]{ | |||||
0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, | |||||
0x69, 0x6f, 0x74, 0x2e, 0x61, 0x69, 0x63, | |||||
0x61, 0x72, 0x65, 0x2e, 0x6e, 0x65, 0x74, | |||||
0x2e, 0x63, 0x6e}; | |||||
private byte[] IpUrl = new byte[]{ | |||||
0x2f, 0x64, 0x65, 0x76, 0x69, | |||||
0x76, 0x63, 0x64, 0x2f, 0x73, | |||||
0x65, 0x72, 0x76, 0x64, 0x72, | |||||
0x52, 0x65, 0x64, 0x69, 0x72, | |||||
0x65, 0x63, 0x74, 0x2f}; | |||||
private EditText et_ip, et_url, et_port; | |||||
private byte[] testIp = new byte[]{0x74, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x72, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x61, 0x69, 0x63, 0x61, 0x72, 0x65, 0x2e, | |||||
0x6e, 0x65, 0x74, 0x2e, 0x63, 0x6e}; | |||||
private byte[] productIp = new byte[]{0x61, 0x69, 0x6c, 0x69, 0x6e, 0x6b, 0x2e, 0x69, 0x6f, 0x74, 0x2e, 0x61, 0x69, 0x63, 0x61, 0x72, 0x65, 0x2e, 0x6e, 0x65, 0x74, 0x2e, 0x63, 0x6e}; | |||||
private byte[] IpUrl = new byte[]{0x2f, 0x64, 0x65, 0x76, 0x69, 0x76, 0x63, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x64, 0x72, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2f}; | |||||
private boolean isTest = false; | private boolean isTest = false; | ||||
@Override | @Override | ||||
findViewById(R.id.setedmac).setOnClickListener(this); | findViewById(R.id.setedmac).setOnClickListener(this); | ||||
findViewById(R.id.ota).setOnClickListener(this); | findViewById(R.id.ota).setOnClickListener(this); | ||||
findViewById(R.id.surroundings).setOnClickListener(this); | findViewById(R.id.surroundings).setOnClickListener(this); | ||||
findViewById(R.id.check_ip).setOnClickListener(this); | |||||
findViewById(R.id.check_port).setOnClickListener(this); | |||||
findViewById(R.id.check_url).setOnClickListener(this); | |||||
et_ip = findViewById(R.id.et_ip); | |||||
et_port = findViewById(R.id.et_port); | |||||
et_url = findViewById(R.id.et_url); | |||||
mEditText = findViewById(R.id.select_wifi_et); | mEditText = findViewById(R.id.select_wifi_et); | ||||
kg = findViewById(R.id.kg); | kg = findViewById(R.id.kg); | ||||
jing = findViewById(R.id.jin); | jing = findViewById(R.id.jin); | ||||
} | } | ||||
}); | }); | ||||
} | } | ||||
*/ | */ | ||||
@Override | @Override | ||||
public void OnSetWifiNameOrPwdOrConnectCallback(int type, int status) { | public void OnSetWifiNameOrPwdOrConnectCallback(int type, int status) { | ||||
if (type == BodyFatDataUtil.SET_WIFI_MAC) { | |||||
if (type == CmdConfig.SET_WIFI_MAC) { | |||||
mList.add(0, "获取到设置的mac地址状态 " + status); | mList.add(0, "获取到设置的mac地址状态 " + status); | ||||
if (status == BodyFatDataUtil.STATUS_SUCCESS) { | if (status == BodyFatDataUtil.STATUS_SUCCESS) { | ||||
issetMac = true; | issetMac = true; | ||||
} | } | ||||
} | } | ||||
if (type == BodyFatDataUtil.SET_WIFI_PAW) { | |||||
if (type == CmdConfig.SET_WIFI_PAW) { | |||||
mList.add(0, "获取到设置的密码状态 " + status); | mList.add(0, "获取到设置的密码状态 " + status); | ||||
if (status == BodyFatDataUtil.STATUS_SUCCESS && issetMac) { | if (status == BodyFatDataUtil.STATUS_SUCCESS && issetMac) { | ||||
mMHandler.sendEmptyMessage(ConnectWifi); | mMHandler.sendEmptyMessage(ConnectWifi); | ||||
} | } | ||||
} | } | ||||
if (type == BodyFatDataUtil.DIS_OR_CON_WIFI) { | |||||
if (type == CmdConfig.DIS_OR_CON_WIFI) { | |||||
mList.add(0, "发起连接 " + status); | mList.add(0, "发起连接 " + status); | ||||
mMHandler.sendEmptyMessage(ToRefreUi); | mMHandler.sendEmptyMessage(ToRefreUi); | ||||
} | } | ||||
@Override | @Override | ||||
public void onSetIpStatus(int status) { | public void onSetIpStatus(int status) { | ||||
// if (status == 0) { | |||||
// if (isTest) { | |||||
// mList.add(0, "设置环境IP为生产环境成功"); | |||||
// mList.add(0, "设置环境路径为生产环境"); | |||||
// } else { | |||||
// mList.add(0, "设置环境IP为测试环境成功"); | |||||
// mList.add(0, "设置环境路径为测试环境"); | |||||
// } | |||||
// setIpUrl(IpUrl); | |||||
// } else { | |||||
// mList.add(0, "设置环境IP失败"); | |||||
// } | |||||
// listAdapter.notifyDataSetChanged(); | |||||
if (status == 0) { | if (status == 0) { | ||||
if (isTest) { | |||||
mList.add(0, "设置环境IP为生产环境成功"); | |||||
mList.add(0, "设置环境路径为生产环境"); | |||||
} else { | |||||
mList.add(0, "设置环境IP为测试环境成功"); | |||||
mList.add(0, "设置环境路径为测试环境"); | |||||
} | |||||
setIpUrl(IpUrl); | |||||
mList.add(0, "设置环境IP成功"); | |||||
int port = Integer.parseInt(et_port.getText().toString()); | |||||
mList.add(0, "设置环境端口为:" + port); | |||||
setPort(port); | |||||
} else { | } else { | ||||
mList.add(0, "设置环境IP失败"); | mList.add(0, "设置环境IP失败"); | ||||
} | } | ||||
} | } | ||||
@Override | @Override | ||||
public void onSetIpUrlStatus(int status) { | |||||
public void onSetPortStatus(int status) { | |||||
if (status == 0) { | if (status == 0) { | ||||
if (isTest) { | |||||
mList.add(0, "设置环境路径为生产环境成功"); | |||||
isTest = false; | |||||
} else { | |||||
mList.add(0, "设置环境路径为测试环境成功"); | |||||
isTest = true; | |||||
mList.add(0, "设置环境端口成功"); | |||||
String ipUrlStr = et_url.getText().toString(); | |||||
mList.add(0, "设置环境url为:" + ipUrlStr); | |||||
setIpUrl(convertToASCII(ipUrlStr)); | |||||
} else { | |||||
mList.add(0, "设置环境端口失败"); | |||||
} | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
} | |||||
@Override | |||||
public void onSetIpUrlStatus(int status) { | |||||
// if (status == 0) { | |||||
// if (isTest) { | |||||
// mList.add(0, "设置环境路径为生产环境成功"); | |||||
// isTest = false; | |||||
// | |||||
// } else { | |||||
// mList.add(0, "设置环境路径为测试环境成功"); | |||||
// isTest = true; | |||||
// | |||||
// } | |||||
// } else { | |||||
// mList.add(0, "设置环境路径失败"); | |||||
// } | |||||
// listAdapter.notifyDataSetChanged(); | |||||
if (status == 0) { | |||||
mList.add(0, "设置环境url成功"); | |||||
} else { | } else { | ||||
mList.add(0, "设置环境路径失败"); | |||||
mList.add(0, "设置环境url失败"); | |||||
} | } | ||||
listAdapter.notifyDataSetChanged(); | listAdapter.notifyDataSetChanged(); | ||||
} | } | ||||
@Override | |||||
public void onIpData(String ip) { | |||||
mList.add(0, "环境ip:" + ip); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
@Override | |||||
public void onPortData(int port) { | |||||
mList.add(0, "环境端口:" + port); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
@Override | |||||
public void onUrlData(String url) { | |||||
mList.add(0, "环境url:" + url); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
@Override | @Override | ||||
public void onClick(View v) { | public void onClick(View v) { | ||||
int id = v.getId(); | int id = v.getId(); | ||||
@Override | @Override | ||||
public void tvSucceedListener(View v, String data) { | public void tvSucceedListener(View v, String data) { | ||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().setWifiMac(wifimacMap.get(selectWifi))); | bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().setWifiMac(wifimacMap.get(selectWifi))); | ||||
if (data.equals("") || data.length() > 8) { | |||||
if (data.equals("") || data.length() >= 8) { | |||||
setPaw(data); | setPaw(data); | ||||
} else { | } else { | ||||
Toast.makeText(WeightScaleWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | Toast.makeText(WeightScaleWifiBleActivity.this, "密码格式不对", Toast.LENGTH_SHORT).show(); | ||||
showFileChooser(); | showFileChooser(); | ||||
break; | break; | ||||
case R.id.surroundings: | case R.id.surroundings: | ||||
if (isTest) { | |||||
setIp(productIp); | |||||
mList.add(0, "设置环境IP为生产环境"); | |||||
} else { | |||||
setIp(testIp); | |||||
mList.add(0, "设置环境IP为测试环境"); | |||||
} | |||||
String ipStr = et_ip.getText().toString(); | |||||
setIp(convertToASCII(ipStr)); | |||||
mList.add(0, "设置环境IP为:" + ipStr); | |||||
listAdapter.notifyDataSetChanged(); | listAdapter.notifyDataSetChanged(); | ||||
break; | break; | ||||
case R.id.check_ip: | |||||
mList.add(0, "查看环境ip"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkIp()); | |||||
break; | |||||
case R.id.check_port: | |||||
mList.add(0, "查看环境端口"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkPort()); | |||||
break; | |||||
case R.id.check_url: | |||||
mList.add(0, "查看环境url"); | |||||
listAdapter.notifyDataSetChanged(); | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().checkUrl()); | |||||
break; | |||||
} | } | ||||
} | } | ||||
private byte[] convertToASCII(String string) { | |||||
char[] ch = string.toCharArray(); | |||||
byte[] tmp = new byte[ch.length]; | |||||
for (int i = 0; i < ch.length; i++) { | |||||
tmp[i] = (byte) Integer.valueOf(ch[i]).intValue(); | |||||
} | |||||
return tmp; | |||||
} | |||||
private void setIp(byte[] ips) { | private void setIp(byte[] ips) { | ||||
if (ips.length <= 14) | if (ips.length <= 14) | ||||
} | } | ||||
private void setPort(int port) { | |||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentPort(port)); | |||||
} | |||||
private void setIpUrl(byte[] setIpUrl) { | private void setIpUrl(byte[] setIpUrl) { | ||||
if (setIpUrl.length <= 14) | if (setIpUrl.length <= 14) | ||||
bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(0, setIpUrl)); | bodyFatBleUtilsData.sendData(BodyFatDataUtil.getInstance().environmentUrl(0, setIpUrl)); | ||||
listAdapter.notifyDataSetChanged(); | listAdapter.notifyDataSetChanged(); | ||||
} | } | ||||
private int mOldProgress = -1; | |||||
@Override | @Override | ||||
public void onOtaProgress(float progress, int currentCount, int maxCount) { | public void onOtaProgress(float progress, int currentCount, int maxCount) { | ||||
mList.add(0, "otaProgress:"+progress); | |||||
listAdapter.notifyDataSetChanged(); | |||||
if (mOldProgress != progress) { | |||||
mOldProgress = (int) progress; | |||||
mList.add(0, "otaProgress:" + progress); | |||||
listAdapter.notifyDataSetChanged(); | |||||
} | |||||
} | } | ||||
}); | }); | ||||
} else { | } else { | ||||
} | } | ||||
} | } | ||||
private static final int FILE_SELECT_CODE = 0x1002; | private static final int FILE_SELECT_CODE = 0x1002; | ||||
private void showFileChooser() { | private void showFileChooser() { | ||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); | Intent intent = new Intent(Intent.ACTION_GET_CONTENT); | ||||
intent.setType("*/*"); | intent.setType("*/*"); | ||||
Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); | Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); | ||||
} | } | ||||
} | } | ||||
} | } |
public final static int SHARE_CONDOM = 0x1007; | public final static int SHARE_CONDOM = 0x1007; | ||||
/** | |||||
* 跳绳 | |||||
*/ | |||||
public final static int ROPE_SKIPPING = 0x002f; | |||||
/** | /** | ||||
* 身高体脂秤 | * 身高体脂秤 | ||||
*/ | */ |
android:layout_width="wrap_content" | android:layout_width="wrap_content" | ||||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||||
android:text="共享套套机" /> | android:text="共享套套机" /> | ||||
<Button | |||||
android:id="@+id/btn_rope_skip" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="跳绳" /> | |||||
</LinearLayout> | </LinearLayout> | ||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:focusable="true" | |||||
android:focusableInTouchMode="true" | |||||
android:orientation="vertical"> | |||||
<LinearLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
> | |||||
<Button | |||||
android:id="@+id/btn_syn_time" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="同步时间搓" /> | |||||
<Button | |||||
android:id="@+id/btn_free_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="启动自由跳" /> | |||||
<Button | |||||
android:id="@+id/btn_time_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="启动倒时跳" /> | |||||
<Button | |||||
android:id="@+id/btn_num_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="启动倒数跳" /> | |||||
</LinearLayout> | |||||
<LinearLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
> | |||||
<Button | |||||
android:id="@+id/btn_stop_free_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="停止自由跳" /> | |||||
<Button | |||||
android:id="@+id/btn_stop_time_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="停止倒时跳" /> | |||||
<Button | |||||
android:id="@+id/btn_stop_num_jump" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="停止倒数跳" /> | |||||
<Button | |||||
android:id="@+id/btn_default_num" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="默认100个" /> | |||||
</LinearLayout> | |||||
<LinearLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
> | |||||
<Button | |||||
android:id="@+id/btn_default_timer" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="默认60秒" /> | |||||
<Button | |||||
android:id="@+id/btn_get_history" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="获取历史记录" /> | |||||
<Button | |||||
android:id="@+id/btn_clear_log" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="暂停刷新" /> | |||||
<Button | |||||
android:id="@+id/btn_bind" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="确认绑定" /> | |||||
</LinearLayout> | |||||
<ListView | |||||
android:id="@+id/listview" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="0dp" | |||||
android:layout_weight="2.5" | |||||
android:padding="10dp" | |||||
android:stackFromBottom="true" | |||||
android:transcriptMode="alwaysScroll"> | |||||
</ListView> | |||||
</LinearLayout> |
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<RelativeLayout | |||||
xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:orientation="vertical"> | |||||
<Button | |||||
android:id="@+id/wifistatus" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="查看wifi状态" /> | |||||
<Button | |||||
android:id="@+id/scan_wifi" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="12dp" | |||||
android:layout_toEndOf="@+id/wifistatus" | |||||
android:text="搜索wifi热点" /> | |||||
<Button | |||||
android:id="@+id/sn" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/scan_wifi" | |||||
android:layout_marginTop="8dp" | |||||
android:text="查看设备did号" /> | |||||
<EditText | |||||
android:id="@+id/select_wifi_et" | |||||
android:layout_width="90dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="22dp" | |||||
android:layout_toEndOf="@+id/scan_wifi" | |||||
android:hint="选择wifi序号" | |||||
android:inputType="number" | |||||
android:textSize="14dp" /> | |||||
<Button | |||||
android:id="@+id/connect_wifi" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/select_wifi_et" | |||||
android:layout_marginStart="13dp" | |||||
android:layout_marginTop="11dp" | |||||
android:layout_toEndOf="@+id/disconnect" | |||||
android:text="发起连接" /> | |||||
<Button | |||||
android:id="@+id/disconnect" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/scan_wifi" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@+id/sn" | |||||
android:text="断开连接" /> | |||||
<Button | |||||
android:id="@+id/setedmac" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/sn" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="获取希望设置的MAC" /> | |||||
<Button | |||||
android:id="@+id/setedpaw" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/sn" | |||||
android:layout_toEndOf="@id/setedmac" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="获取希望设置的密码" /> | |||||
<Button | |||||
android:id="@+id/setedname" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/setedmac" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="获取当前连接wifi名称" /> | |||||
<Button | |||||
android:id="@+id/ota" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/setedmac" | |||||
android:layout_toEndOf="@+id/setedname" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="ota" /> | |||||
<Button | |||||
android:id="@+id/surroundings" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/setedmac" | |||||
android:layout_toEndOf="@+id/ota" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="切换环境" /> | |||||
<RadioGroup | |||||
android:id="@+id/unit" | |||||
android:layout_below="@+id/setedname" | |||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:orientation="vertical"> | |||||
<ScrollView | |||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:orientation="horizontal" | |||||
android:layout_height="wrap_content"> | |||||
<RadioButton | |||||
android:id="@+id/kg" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="kg"/> | |||||
<RadioButton | |||||
android:id="@+id/jin" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="斤"/> | |||||
<RadioButton | |||||
android:id="@+id/st_lb" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="st:lb"/> | |||||
<RadioButton | |||||
android:id="@+id/lb" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="lb"/> | |||||
</RadioGroup> | |||||
android:layout_height="0dp" | |||||
android:layout_weight="1.6"> | |||||
<RelativeLayout | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:orientation="vertical"> | |||||
<Button | |||||
android:id="@+id/wifistatus" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:text="查看wifi状态" /> | |||||
<Button | |||||
android:id="@+id/scan_wifi" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="12dp" | |||||
android:layout_toEndOf="@+id/wifistatus" | |||||
android:text="搜索wifi热点" /> | |||||
<Button | |||||
android:id="@+id/sn" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/scan_wifi" | |||||
android:layout_marginTop="8dp" | |||||
android:text="查看设备did号" /> | |||||
<EditText | |||||
android:id="@+id/select_wifi_et" | |||||
android:layout_width="90dp" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginStart="22dp" | |||||
android:layout_toEndOf="@+id/scan_wifi" | |||||
android:hint="选择wifi序号" | |||||
android:inputType="number" | |||||
android:textSize="14dp" /> | |||||
<Button | |||||
android:id="@+id/connect_wifi" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/select_wifi_et" | |||||
android:layout_marginStart="13dp" | |||||
android:layout_marginTop="11dp" | |||||
android:layout_toEndOf="@+id/disconnect" | |||||
android:text="发起连接" /> | |||||
<Button | |||||
android:id="@+id/disconnect" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/scan_wifi" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@+id/sn" | |||||
android:text="断开连接" /> | |||||
<Button | |||||
android:id="@+id/setedmac" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/sn" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="获取希望设置的MAC" /> | |||||
<Button | |||||
android:id="@+id/setedpaw" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/sn" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@id/setedmac" | |||||
android:text="获取希望设置的密码" /> | |||||
<Button | |||||
android:id="@+id/setedname" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/setedmac" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="获取当前连接wifi名称" /> | |||||
<Button | |||||
android:id="@+id/ota" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/setedmac" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@+id/setedname" | |||||
android:text="ota" /> | |||||
<EditText | |||||
android:id="@+id/et_ip" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/setedname" | |||||
android:layout_marginStart="10dp" | |||||
android:layout_marginEnd="10dp" | |||||
android:inputType="text" | |||||
android:maxLines="1" | |||||
android:text="47.113.114.70" /> | |||||
<EditText | |||||
android:id="@+id/et_port" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/et_ip" | |||||
android:layout_marginStart="10dp" | |||||
android:layout_marginEnd="10dp" | |||||
android:inputType="number" | |||||
android:maxLines="1" | |||||
android:text="8092" /> | |||||
<EditText | |||||
android:id="@+id/et_url" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/et_port" | |||||
android:layout_marginStart="10dp" | |||||
android:layout_marginEnd="10dp" | |||||
android:inputType="text" | |||||
android:maxLines="1" | |||||
android:text="/index/" /> | |||||
<Button | |||||
android:id="@+id/surroundings" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/et_url" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:text="切换环境" /> | |||||
<Button | |||||
android:id="@+id/check_ip" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/et_url" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@id/surroundings" | |||||
android:text="查看ip" /> | |||||
<Button | |||||
android:id="@+id/check_port" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/et_url" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@id/check_ip" | |||||
android:text="查看端口" /> | |||||
<Button | |||||
android:id="@+id/check_url" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@id/et_url" | |||||
android:layout_marginStart="9dp" | |||||
android:layout_marginTop="5dp" | |||||
android:layout_toEndOf="@id/check_port" | |||||
android:text="查看url" /> | |||||
<RadioGroup | |||||
android:id="@+id/unit" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_below="@+id/check_ip" | |||||
android:orientation="horizontal"> | |||||
<RadioButton | |||||
android:id="@+id/kg" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="kg" /> | |||||
<RadioButton | |||||
android:id="@+id/jin" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="斤" /> | |||||
<RadioButton | |||||
android:id="@+id/st_lb" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="st:lb" /> | |||||
<RadioButton | |||||
android:id="@+id/lb" | |||||
android:layout_width="wrap_content" | |||||
android:layout_height="wrap_content" | |||||
android:layout_weight="1" | |||||
android:text="lb" /> | |||||
</RadioGroup> | |||||
</RelativeLayout> | |||||
</ScrollView> | |||||
<ListView | <ListView | ||||
android:id="@+id/log_list" | android:id="@+id/log_list" | ||||
android:layout_marginTop="20dp" | |||||
android:layout_below="@id/unit" | |||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_height="match_parent"> | |||||
android:layout_height="0dp" | |||||
android:layout_below="@id/unit" | |||||
android:layout_marginTop="20dp" | |||||
android:layout_weight="1"> | |||||
</ListView> | </ListView> | ||||
</RelativeLayout> | |||||
</LinearLayout> |