768 lines
30 KiB
Java
768 lines
30 KiB
Java
package com.uiuios.aios.activity;
|
|
|
|
import android.bluetooth.BluetoothAdapter;
|
|
import android.bluetooth.BluetoothDevice;
|
|
import android.content.BroadcastReceiver;
|
|
import android.content.ContentResolver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.content.pm.PackageManager;
|
|
import android.hardware.camera2.CameraAccessException;
|
|
import android.hardware.camera2.CameraCharacteristics;
|
|
import android.hardware.camera2.CameraManager;
|
|
import android.media.AudioManager;
|
|
import android.net.ConnectivityManager;
|
|
import android.net.NetworkInfo;
|
|
import android.net.wifi.WifiInfo;
|
|
import android.net.wifi.WifiManager;
|
|
import android.os.BatteryManager;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.provider.Settings;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
import android.widget.ImageView;
|
|
import android.widget.SeekBar;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
|
|
|
import com.baidu.location.BDAbstractLocationListener;
|
|
import com.baidu.location.BDLocation;
|
|
import com.baidu.location.LocationClient;
|
|
import com.uiuios.aios.R;
|
|
import com.uiuios.aios.manager.AmapManager;
|
|
import com.uiuios.aios.utils.BrightnessUtils;
|
|
import com.uiuios.aios.view.RulerSeekBar;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.util.Arrays;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.function.Predicate;
|
|
import java.util.stream.Collectors;
|
|
|
|
import butterknife.BindView;
|
|
import butterknife.ButterKnife;
|
|
import butterknife.OnClick;
|
|
|
|
public class ControlActivity extends AppCompatActivity {
|
|
private static final String TAG = ControlActivity.class.getSimpleName();
|
|
|
|
@BindView(R.id.iv_back)
|
|
ImageView iv_back;
|
|
|
|
@BindView(R.id.tv_wifi)
|
|
TextView tv_wifi;
|
|
@BindView(R.id.tv_wifi_ssid)
|
|
TextView tv_wifi_ssid;
|
|
@BindView(R.id.tv_bt)
|
|
TextView tv_bt;
|
|
@BindView(R.id.tv_bt_ssid)
|
|
TextView tv_bt_ssid;
|
|
|
|
// @BindView(R.id.tv_font_size)
|
|
// TextView tv_font_size;
|
|
@BindView(R.id.seekBar)
|
|
RulerSeekBar seekBar;
|
|
@BindView(R.id.seekbar_brightness)
|
|
SeekBar seekbar_brightness;
|
|
@BindView(R.id.seekbar_sound)
|
|
SeekBar seekbar_sound;
|
|
|
|
@BindView(R.id.tv_sound)
|
|
TextView tv_sound;
|
|
|
|
@BindView(R.id.tv_battery)
|
|
TextView tv_battery;
|
|
@BindView(R.id.tv_electricity)
|
|
TextView tv_electricity;
|
|
@BindView(R.id.tv_flashlight)
|
|
TextView tv_flashlight;
|
|
@BindView(R.id.tv_flashlight_switch)
|
|
TextView tv_flashlight_switch;
|
|
|
|
@BindView(R.id.tv_brightness)
|
|
TextView tv_brightness;
|
|
@BindView(R.id.tv_location)
|
|
TextView tv_location;
|
|
|
|
@BindView(R.id.cl_wifi)
|
|
ConstraintLayout cl_wifi;
|
|
@BindView(R.id.cl_bt)
|
|
ConstraintLayout cl_bt;
|
|
@BindView(R.id.cl_battery)
|
|
ConstraintLayout cl_battery;
|
|
@BindView(R.id.cl_flashlight)
|
|
ConstraintLayout cl_flashlight;
|
|
@BindView(R.id.cl_location)
|
|
ConstraintLayout cl_location;
|
|
|
|
|
|
@OnClick({R.id.iv_back})
|
|
void OnClick(View v) {
|
|
switch (v.getId()) {
|
|
case R.id.iv_back:
|
|
finish();
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
|
|
|
|
private ContentResolver crv;
|
|
private static final String ACTION_FLASHLIGHT_CHANGED =
|
|
"com.android.settings.flashlight.action.FLASHLIGHT_CHANGED";
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_control);
|
|
ButterKnife.bind(this);
|
|
crv = getContentResolver();
|
|
initView();
|
|
}
|
|
|
|
private void initView() {
|
|
getWifi();
|
|
registerReceivers();
|
|
getBluetooth();
|
|
registerBluetoothReceiver();
|
|
getBattery();
|
|
registerBatteryReceiver();
|
|
getFlashlight();
|
|
getFontSize();
|
|
getLocation();
|
|
getBrightness();
|
|
getSound();
|
|
}
|
|
|
|
private void getWifi() {
|
|
cl_wifi.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
|
|
}
|
|
});
|
|
if (isWifiEnabled()) {
|
|
tv_wifi_ssid.setText(getConnectWifiSsid());
|
|
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item));
|
|
} else {
|
|
tv_wifi_ssid.setText("未连接");
|
|
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
}
|
|
}
|
|
|
|
public boolean isWifiEnabled() {
|
|
WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
|
|
if (wifiMgr.getWifiState() == WifiManager.WIFI_STATE_ENABLED) {
|
|
ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
NetworkInfo wifiInfo = connManager
|
|
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
|
|
return wifiInfo.isConnected();
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private WifiReceiver mWifiReceiver;
|
|
|
|
private void registerReceivers() {
|
|
registerWiFiReceiver();
|
|
}
|
|
|
|
private void registerWiFiReceiver() {
|
|
if (mWifiReceiver == null) {
|
|
mWifiReceiver = new WifiReceiver();
|
|
}
|
|
IntentFilter filter = new IntentFilter();
|
|
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.RSSI_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.NETWORK_IDS_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
|
|
filter.addAction(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
|
|
filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
|
|
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
|
|
registerReceiver(mWifiReceiver, filter);
|
|
}
|
|
|
|
public class WifiReceiver extends BroadcastReceiver {
|
|
private static final String TAG = "wifiReceiver";
|
|
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
switch (intent.getAction()) {
|
|
case WifiManager.RSSI_CHANGED_ACTION:
|
|
Log.e(TAG, "wifi信号强度变化");
|
|
break;
|
|
//wifi连接上与否
|
|
case WifiManager.NETWORK_STATE_CHANGED_ACTION:
|
|
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
|
|
if (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
|
|
Log.e(TAG, "wifi断开");
|
|
tv_wifi_ssid.setText("未连接");
|
|
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
} else if (info.getState().equals(NetworkInfo.State.CONNECTED)) {
|
|
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
|
|
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
|
|
//获取当前wifi名称
|
|
String newSSID = wifiInfo.getSSID();
|
|
tv_wifi_ssid.setText(newSSID.replaceAll("\"", ""));
|
|
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item));
|
|
}
|
|
break;
|
|
//wifi打开与否
|
|
case WifiManager.WIFI_STATE_CHANGED_ACTION:
|
|
int wifistate = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_DISABLED);
|
|
if (wifistate == WifiManager.WIFI_STATE_DISABLED) {
|
|
Log.e(TAG, "系统关闭wifi");
|
|
tv_wifi_ssid.setText("关");
|
|
cl_wifi.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
} else if (wifistate == WifiManager.WIFI_STATE_ENABLED) {
|
|
Log.e(TAG, "系统开启wifi");
|
|
}
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 获取当前连接WIFI的SSID
|
|
*/
|
|
public String getSSID() {
|
|
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
|
|
if (wm != null) {
|
|
WifiInfo winfo = wm.getConnectionInfo();
|
|
if (winfo != null) {
|
|
String s = winfo.getSSID();
|
|
if (s.length() > 2 && s.charAt(0) == '"' && s.charAt(s.length() - 1) == '"') {
|
|
return s.substring(1, s.length() - 1);
|
|
}
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
private String getConnectWifiSsid() {
|
|
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
|
|
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
|
|
// //去掉带引号的字符串方法一
|
|
// String wifiInfo1 = wifiInfo.getSSID();
|
|
// if (wifiInfo1.contains("\"")) {
|
|
// wifiInfo1 = wifiInfo1.substring(1, wifiInfo1.length() - 1);
|
|
// }
|
|
//去掉带引号的字符串方法二
|
|
String wifiSSID = wifiInfo.getSSID();
|
|
String wifiInfo1 = wifiSSID.replaceAll("\"", "");
|
|
return wifiInfo1;
|
|
}
|
|
|
|
private BluetoothAdapter bluetoothAdapter;
|
|
|
|
private void getBluetooth() {
|
|
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
if (bluetoothAdapter.isEnabled()) {
|
|
if (isConnected()) {
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
|
|
tv_bt_ssid.setText(getBluetoothDeviceName());
|
|
} else {
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
tv_bt_ssid.setText("未连接");
|
|
}
|
|
} else {
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
tv_bt_ssid.setText("已关闭");
|
|
}
|
|
getConnectedDevicesV1();
|
|
cl_bt.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
|
|
}
|
|
});
|
|
}
|
|
|
|
public boolean isConnected() {
|
|
Set<BluetoothDevice> bondedDevices = bluetoothAdapter.getBondedDevices();
|
|
List<BluetoothDevice> deviceList = bondedDevices.stream().filter(new Predicate<BluetoothDevice>() {
|
|
@Override
|
|
public boolean test(BluetoothDevice bluetoothDevice) {
|
|
return bluetoothDevice.isConnected();
|
|
}
|
|
}).collect(Collectors.toList());
|
|
return deviceList.size() > 0;
|
|
}
|
|
|
|
public String getBluetoothDeviceName() {
|
|
Set<BluetoothDevice> bondedDevices = bluetoothAdapter.getBondedDevices();
|
|
List<BluetoothDevice> deviceList = bondedDevices.stream().filter(new Predicate<BluetoothDevice>() {
|
|
@Override
|
|
public boolean test(BluetoothDevice bluetoothDevice) {
|
|
return bluetoothDevice.isConnected();
|
|
}
|
|
}).collect(Collectors.toList());
|
|
if (deviceList.size() == 0) {
|
|
return "未连接";
|
|
} else {
|
|
return deviceList.get(0).getName();
|
|
}
|
|
}
|
|
|
|
//TODO 根据mac地址判断是否已连接(这里参数可以直接用BluetoothDevice对象)
|
|
//但这么写其实更通用。
|
|
public boolean isConnected(String macAddress) {
|
|
if (!BluetoothAdapter.checkBluetoothAddress(macAddress)) {
|
|
return false;
|
|
}
|
|
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
|
BluetoothDevice device = bluetoothAdapter.getRemoteDevice(macAddress);
|
|
|
|
Method isConnectedMethod = null;
|
|
boolean isConnected;
|
|
try {
|
|
isConnectedMethod = BluetoothDevice.class.getDeclaredMethod("isConnected", (Class[]) null);
|
|
isConnectedMethod.setAccessible(true);
|
|
isConnected = (boolean) isConnectedMethod.invoke(device, (Object[]) null);
|
|
} catch (NoSuchMethodException e) {
|
|
isConnected = false;
|
|
} catch (IllegalAccessException e) {
|
|
isConnected = false;
|
|
} catch (InvocationTargetException e) {
|
|
isConnected = false;
|
|
}
|
|
return isConnected;
|
|
}
|
|
|
|
/**
|
|
* 获取系统中已连接的蓝牙设备
|
|
*
|
|
* @return
|
|
*/
|
|
public Set<BluetoothDevice> getConnectedDevicesV1() {
|
|
Class<BluetoothAdapter> bluetoothAdapterClass = BluetoothAdapter.class;//得到BluetoothAdapter的Class对象
|
|
Set<BluetoothDevice> deviceSet = new HashSet<>();
|
|
//是否存在连接的蓝牙设备
|
|
try {
|
|
Method method = bluetoothAdapterClass.getDeclaredMethod("getMostRecentlyConnectedDevices", (Class[]) null);
|
|
//打开权限
|
|
method.setAccessible(true);
|
|
List<BluetoothDevice> list = (List<BluetoothDevice>) method.invoke(BluetoothAdapter.getDefaultAdapter(), (Object[]) null);
|
|
Log.e("zbh", "最近连接过的设备:");
|
|
for (BluetoothDevice dev : list
|
|
) {
|
|
String Type = "";
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
|
switch (dev.getType()) {
|
|
case BluetoothDevice.DEVICE_TYPE_CLASSIC:
|
|
Type = "经典";
|
|
break;
|
|
case BluetoothDevice.DEVICE_TYPE_LE:
|
|
Type = "BLE";
|
|
break;
|
|
case BluetoothDevice.DEVICE_TYPE_DUAL:
|
|
Type = "双模";
|
|
break;
|
|
default:
|
|
Type = "未知";
|
|
break;
|
|
}
|
|
}
|
|
String connect = "设备未连接";
|
|
if (isConnected(dev.getAddress())) {
|
|
deviceSet.add(dev);
|
|
connect = "设备已连接";
|
|
}
|
|
Log.e("zbh", connect + ", address = " + dev.getAddress() + "(" + Type + "), name --> " + dev.getName());
|
|
|
|
}
|
|
} catch (NoSuchMethodException e) {
|
|
e.printStackTrace();
|
|
} catch (IllegalAccessException e) {
|
|
e.printStackTrace();
|
|
} catch (InvocationTargetException e) {
|
|
e.printStackTrace();
|
|
}
|
|
return deviceSet;
|
|
}
|
|
|
|
private BluetoothMonitorReceiver bleListenerReceiver;
|
|
|
|
private void registerBluetoothReceiver() {
|
|
bleListenerReceiver = new BluetoothMonitorReceiver();
|
|
IntentFilter intentFilter = new IntentFilter();
|
|
// 监视蓝牙关闭和打开的状态
|
|
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
|
|
// 监视蓝牙设备与APP连接的状态
|
|
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
|
|
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
|
|
// 注册广播
|
|
registerReceiver(this.bleListenerReceiver, intentFilter);
|
|
}
|
|
|
|
public class BluetoothMonitorReceiver extends BroadcastReceiver {
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
String action = intent.getAction();
|
|
Log.e("BluetoothMonitorReceiver", "onReceive: " + action);
|
|
if (!TextUtils.isEmpty(action)) {
|
|
switch (action) {
|
|
case BluetoothAdapter.ACTION_STATE_CHANGED:
|
|
int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
|
|
switch (blueState) {
|
|
case BluetoothAdapter.STATE_TURNING_ON:
|
|
tv_bt_ssid.setText("正在打开");
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
|
|
break;
|
|
case BluetoothAdapter.STATE_ON:
|
|
tv_bt_ssid.setText("已打开");
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
|
|
break;
|
|
case BluetoothAdapter.STATE_TURNING_OFF:
|
|
tv_bt_ssid.setText("正在关闭");
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
|
|
break;
|
|
case BluetoothAdapter.STATE_OFF:
|
|
tv_bt_ssid.setText("已关闭");
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
break;
|
|
default:
|
|
}
|
|
break;
|
|
case BluetoothDevice.ACTION_ACL_CONNECTED:
|
|
tv_bt_ssid.setText(getBluetoothDeviceName());
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item));
|
|
break;
|
|
case BluetoothDevice.ACTION_ACL_DISCONNECTED:
|
|
tv_bt_ssid.setText("未连接");
|
|
cl_bt.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
break;
|
|
default:
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void getBattery() {
|
|
tv_electricity.setText(getBatteryCapacity() + "%");
|
|
if (isBatteryCharging()) {
|
|
cl_battery.setBackground(getDrawable(R.drawable.control_background_item));
|
|
} else {
|
|
cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 主动获取当前电池是否在充电 , 即数据线是否插在手机上
|
|
*
|
|
* @return
|
|
*/
|
|
public boolean isBatteryCharging() {
|
|
boolean isBatteryCharging = false;
|
|
// 主动发送包含是否正在充电状态的广播 , 该广播会持续发送
|
|
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
|
|
// 注册广播接受者
|
|
Intent intent = registerReceiver(null, intentFilter);
|
|
// 获取充电状态
|
|
int batteryChargeState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
|
|
// 判定是否是 AC 交流电充电
|
|
boolean isAc = batteryChargeState == BatteryManager.BATTERY_PLUGGED_AC;
|
|
// 判断是否是 USB 充电
|
|
boolean isUsb = batteryChargeState == BatteryManager.BATTERY_PLUGGED_USB;
|
|
// 判断是否是 无线充电
|
|
boolean isWireless = batteryChargeState == BatteryManager.BATTERY_PLUGGED_WIRELESS;
|
|
// 如何上述任意一种为 true , 说明当前正在充电
|
|
isBatteryCharging = isAc || isUsb || isWireless;
|
|
return isBatteryCharging;
|
|
}
|
|
|
|
|
|
public int getBatteryCapacity() {
|
|
try {
|
|
BatteryManager batteryManager = (BatteryManager) getSystemService(Context.BATTERY_SERVICE);
|
|
return batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
|
|
} catch (Exception e) {
|
|
Log.e("getBattery", "getBattery" + e.getMessage());
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
private BatteryReceiver mBatteryReceiver;
|
|
|
|
private void registerBatteryReceiver() {
|
|
if (mBatteryReceiver == null) {
|
|
mBatteryReceiver = new BatteryReceiver();
|
|
IntentFilter filter = new IntentFilter();
|
|
filter.addAction(Intent.ACTION_POWER_CONNECTED);
|
|
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);
|
|
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
|
|
filter.addAction(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
|
filter.addAction(Intent.ACTION_BATTERY_LOW);
|
|
filter.addAction(Intent.ACTION_BATTERY_OKAY);
|
|
registerReceiver(mBatteryReceiver, filter);
|
|
}
|
|
}
|
|
|
|
public class BatteryReceiver extends BroadcastReceiver {
|
|
public static final String TAG = "BatteryReceiver";
|
|
|
|
@Override
|
|
public void onReceive(Context context, Intent intent) {
|
|
// 获取广播事件
|
|
String action = intent.getAction();
|
|
if (TextUtils.isEmpty(action)) return;
|
|
Log.e(TAG, "onReceive: " + action);
|
|
switch (action) {
|
|
case Intent.ACTION_POWER_CONNECTED:
|
|
cl_battery.setBackground(getDrawable(R.drawable.control_background_item));
|
|
break;
|
|
case Intent.ACTION_POWER_DISCONNECTED:
|
|
cl_battery.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
break;
|
|
case Intent.ACTION_BATTERY_LEVEL_CHANGED:
|
|
tv_electricity.setText(getBatteryCapacity() + "%");
|
|
break;
|
|
default:
|
|
}
|
|
}
|
|
}
|
|
|
|
private boolean flashing = false;
|
|
private CameraManager cameraManager;
|
|
|
|
private void getFlashlight() {
|
|
if (isFlashlightAvailable()) {
|
|
tv_flashlight_switch.setText("关");
|
|
cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
} else {
|
|
tv_flashlight_switch.setText("不可用");
|
|
cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
return;
|
|
}
|
|
// if (isFlashlightEnabled()) {
|
|
// tv_flashlight_switch.setText("开");
|
|
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item));
|
|
// } else {
|
|
// tv_flashlight_switch.setText("关");
|
|
// cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
// }
|
|
|
|
cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
|
|
|
|
cl_flashlight.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
if (flashing) {
|
|
try {
|
|
String CameraId = cameraManager.getCameraIdList()[0];
|
|
cameraManager.setTorchMode(CameraId, false);
|
|
} catch (CameraAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
flashing = false;
|
|
tv_flashlight_switch.setText("关");
|
|
cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item_dis));
|
|
} else {
|
|
try {
|
|
String CameraId = cameraManager.getCameraIdList()[0];
|
|
cameraManager.setTorchMode(CameraId, true);
|
|
} catch (CameraAccessException e) {
|
|
e.printStackTrace();
|
|
}
|
|
tv_flashlight_switch.setText("开");
|
|
cl_flashlight.setBackground(getDrawable(R.drawable.control_background_item));
|
|
flashing = true;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
private boolean isFlashlightAvailable() {
|
|
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
|
|
}
|
|
|
|
private static String getCameraId(Context context) throws CameraAccessException {
|
|
final CameraManager cameraManager = context.getSystemService(CameraManager.class);
|
|
final String[] ids = cameraManager.getCameraIdList();
|
|
for (String id : ids) {
|
|
CameraCharacteristics c = cameraManager.getCameraCharacteristics(id);
|
|
Boolean flashAvailable = c.get(CameraCharacteristics.FLASH_INFO_AVAILABLE);
|
|
Integer lensFacing = c.get(CameraCharacteristics.LENS_FACING);
|
|
if (flashAvailable != null && flashAvailable
|
|
&& lensFacing != null && lensFacing == CameraCharacteristics.LENS_FACING_BACK) {
|
|
return id;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private boolean isFlashlightEnabled() {
|
|
return Settings.Secure.getInt(crv, Settings.Secure.FLASHLIGHT_ENABLED, 0) == 1;
|
|
}
|
|
|
|
private void getFontSize() {
|
|
float fontScale = Settings.System.getFloat(crv, Settings.System.FONT_SCALE, 0.0f);
|
|
Log.e(TAG, "getHardware: fontScale = " + fontScale);
|
|
List<String> mEntries = Arrays.asList(getResources().getStringArray(R.array.entries_font_size));
|
|
List<String> strEntryValues = Arrays.asList(getResources().getStringArray(R.array.entryvalues_font_size));
|
|
seekBar.setMax(mEntries.size() - 1);
|
|
String font_size;
|
|
int index = strEntryValues.indexOf(String.valueOf(fontScale));
|
|
if (index == -1) {
|
|
font_size = "默认";
|
|
} else {
|
|
font_size = mEntries.get(index);
|
|
}
|
|
// tv_font_size.setText(font_size);
|
|
seekBar.setProgress(index);
|
|
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
@Override
|
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
|
Settings.System.putFloat(crv, Settings.System.FONT_SCALE, Float.parseFloat(strEntryValues.get(i)));
|
|
}
|
|
|
|
@Override
|
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
private LocationClient locationClient;
|
|
|
|
private void getLocation() {
|
|
BDLocation bdLocation = AmapManager.getInstance().getNowMapLocation();
|
|
if (bdLocation != null) {
|
|
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation // GPS定位结果
|
|
|| bdLocation.getLocType() == BDLocation.TypeNetWorkLocation // 网络定位结果
|
|
|| bdLocation.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
|
|
tv_location.setText(bdLocation.getAddrStr());
|
|
} else {
|
|
tv_location.setText("未知");
|
|
}
|
|
} else {
|
|
tv_location.setText("定位失败");
|
|
}
|
|
startLocation();
|
|
cl_location.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View view) {
|
|
startLocation();
|
|
}
|
|
});
|
|
}
|
|
|
|
private void startLocation() {
|
|
if (locationClient == null) {
|
|
locationClient = AmapManager.getInstance().getLocationClient();
|
|
}
|
|
locationClient.stop();
|
|
locationClient.start();
|
|
locationClient.registerLocationListener(new BDAbstractLocationListener() {
|
|
@Override
|
|
public void onReceiveLocation(BDLocation bdLocation) {
|
|
switch (bdLocation.getLocType()) {
|
|
case BDLocation.TypeGpsLocation:// GPS定位结果
|
|
case BDLocation.TypeNetWorkLocation:// 网络定位结果
|
|
case BDLocation.TypeOffLineLocation:// 离线定位结果
|
|
tv_location.setText(bdLocation.getAddrStr());
|
|
break;
|
|
default:
|
|
tv_location.setText("定位失败");
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private void getBrightness() {
|
|
seekbar_brightness.setMax(255);
|
|
//亮度
|
|
int brightness = Settings.System.getInt(crv, Settings.System.SCREEN_BRIGHTNESS, 1);
|
|
seekbar_brightness.setProgress(brightness);
|
|
Log.e(TAG, "getHardware: brightness = " + brightness);
|
|
int gamma = BrightnessUtils.convertLinearToGamma(brightness, 1, 255);
|
|
Log.e(TAG, "getHardware: gamma = " + gamma);
|
|
long percentage = Math.round((((double) gamma / 65535) * 100f));
|
|
tv_brightness.setText(percentage + "%");
|
|
Log.e(TAG, "getHardware: percentage = " + percentage);
|
|
seekbar_brightness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
@Override
|
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
|
Log.e(TAG, "onProgressChanged: i = " + i);
|
|
Settings.System.putInt(crv, Settings.System.SCREEN_BRIGHTNESS, i);
|
|
int gamma = BrightnessUtils.convertLinearToGamma(i, 1, 255);
|
|
Log.e(TAG, "onProgressChanged: gamma = " + gamma);
|
|
long percentage = Math.round((((double) gamma / 65535) * 100f));
|
|
Log.e(TAG, "onProgressChanged: percentage = " + percentage);
|
|
tv_brightness.setText(percentage + "%");
|
|
}
|
|
|
|
@Override
|
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
private AudioManager mAudioManager;
|
|
|
|
private void getSound() {
|
|
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
|
|
//最大音量
|
|
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
|
|
seekbar_sound.setMax(maxVolume);
|
|
Log.e(TAG, "getHardware: maxVolume = " + maxVolume);
|
|
//音量
|
|
int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
|
|
seekbar_sound.setProgress(streamVolume);
|
|
Log.e(TAG, "getHardware: streamVolume = " + streamVolume);
|
|
int currentVolume = (int) (((double) streamVolume / (double) maxVolume) * 100f);
|
|
Log.e(TAG, "getHardware: currentVolume = " + currentVolume);
|
|
tv_sound.setText(currentVolume + "%");
|
|
seekbar_sound.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
|
@Override
|
|
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
|
|
int volume = (int) (((double) i / (double) maxVolume) * 100f);
|
|
tv_sound.setText(volume + "%");
|
|
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i, 0);
|
|
}
|
|
|
|
@Override
|
|
public void onStartTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public void onStopTrackingTouch(SeekBar seekBar) {
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy() {
|
|
super.onDestroy();
|
|
if (mWifiReceiver != null) unregisterReceiver(mWifiReceiver);
|
|
}
|
|
}
|