页面修改

yt_mpremote
liuguijing 3 months ago
parent 2ce5d1f821
commit fcb880375f

@ -8,6 +8,7 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.Manifest;
import android.app.AlertDialog;
@ -18,8 +19,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.Typeface;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
@ -31,29 +30,29 @@ import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSpecifier;
import android.net.wifi.WifiNetworkSuggestion;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.xypower.mpremote.adapter.ItemAdapter;
import com.xypower.mpremote.bean.WifiInfoBean;
import com.xypower.mpremote.databinding.ActivityMainBinding;
import com.xypower.mpremote.interfaces.OnItemClickListener;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
public class MainActivity extends AppCompatActivity implements OnItemClickListener, View.OnClickListener {
// Used to load the 'mpremote' library on application startup.
@ -68,92 +67,75 @@ public class MainActivity extends AppCompatActivity {
private static final String WIFI_IP_PREFIX = "192.168.";
private ActivityMainBinding binding;
private Handler mHandler;
private List<ScanResult> mScanResults = new ArrayList<>();
private Handler mHandler= new Handler();
private List<ScanResult> mScanResults = new ArrayList<>();//扫描到的wifi集合
private ScanResult mCurrentScanResult;
private String mPassword = DEFAULT_PRE_SHARED_KEY;
private boolean mUsingGatewayIp = true;
private String mAssignedIp = "";
private WifiAdaper mAdapter;
private List<Map<String, Object>> mItems = new ArrayList<Map<String, Object>>();
private List<WifiInfoBean> mItems = new ArrayList<>();
private ConnectivityManager mConnectivityManager;
private NetworkConnectChangedReceiver mNetworkConnectChangedReceiver;
private ConnectivityManager.NetworkCallback mNetworkCallback;
private ActivityResultLauncher<Intent> settingLauncher;
public class WifiAdaper extends SimpleAdapter{
public WifiAdaper(Context context, List<Map<String, Object>> items, int resource, String[] from, int[] to) {
super(context, items, resource, from, to);
}
public View getView(int position, View convertView, ViewGroup parent){
convertView = super.getView(position, convertView, parent);
TextView textView = (TextView)convertView.findViewById(R.id.id_text);
ScanResult scanResult = mScanResults.get(position);
// if (scanResult.)
String text = (String)mItems.get(position).get("text");
if (text.startsWith("XY") || text.startsWith("xy")) {
textView.setTextColor(Color.RED);
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
} else {
textView.setTextColor(Color.BLACK);
textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
}
return convertView;
}
}
private ItemAdapter adapter;
private WifiManager wifiManager;
private ActivityResultLauncher<Intent> wifiLauncher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);//获取wifi管理器
initActivityResult();//初始化页面回调
initView();//初始化页面显示
initEvent();//初始化事件
}
private void initEvent() {
AdbManager.initManager(this);//初始化Adb
loadSettings();//获取wifi配置
mHandler = new Handler();
if (applyForPermissions()) {
scanWifi();
}
}
initActivityResult();
AdbManager.initManager(this);
private void initView() {
adapter = new ItemAdapter();
adapter.setOnClickListener(this);
binding.listView.setAdapter(adapter);
binding.listView.setLayoutManager(new LinearLayoutManager(this));
mConnectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
binding.refresh.setOnClickListener(this);
binding.setting.setOnClickListener(this);
}
binding.listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
private void initActivityResult() {
settingLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
public void onActivityResult(ActivityResult result) {
loadSettings();
}
});
mCurrentScanResult = mScanResults.get(position);
wifiLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String s1 = normalizeSSID(mCurrentScanResult.SSID);
String s2 = normalizeSSID(wifiInfo.getSSID());
if (TextUtils.equals(s1, s2)) {
openDeviceActivity();
} else {
startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));
if (wifiInfo != null) {
String ssid = wifiInfo.getSSID();
if (!TextUtils.isEmpty(ssid)) {
if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
ssid = ssid.substring(1, ssid.length() - 1);
}
// connectWifi(mCurrentScanResult.SSID, mCurrentScanResult.BSSID, mPassword);
}
});
if (applyForPermissions()) {
scanWifi();
if (ssid.startsWith("XY") || ssid.startsWith("xy")) {
openDeviceActivity();
}
}
private void initActivityResult() {
settingLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
loadSettings();
}
});
}
@ -161,7 +143,6 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
if (mConnectivityManager != null && mNetworkCallback != null) {
mConnectivityManager.bindProcessToNetwork(null);
mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
@ -183,10 +164,8 @@ public class MainActivity extends AppCompatActivity {
case R.id.action_refresh:
scanWifi();
break;
case R.id.action_settings: {
Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
settingLauncher.launch(intent);
}
case R.id.action_settings:
openSettingActivity();
break;
default:
break;
@ -194,6 +173,7 @@ public class MainActivity extends AppCompatActivity {
return super.onOptionsItemSelected(item);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
@ -218,8 +198,7 @@ public class MainActivity extends AppCompatActivity {
if (banList.size() > 0) {
//告知该权限作用,要求手动授予权限
showFinishedDialog();
}
else if (requestList.size() > 0) {
} else if (requestList.size() > 0) {
//告知权限的作用,并重新申请
showTipDialog(requestList);
} else {
@ -262,54 +241,33 @@ public class MainActivity extends AppCompatActivity {
.create();
dialog.show();
}
protected void scanWifi() {
mScanResults.clear();
(new Thread(new Runnable() {
new Thread(new Runnable() {
@Override
public void run() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.startScan();
List<ScanResult> scanResults = wifiManager.getScanResults();
Map<String, String> ssids = new HashMap<>();
for (ScanResult scanResult : scanResults) {
if (TextUtils.isEmpty(scanResult.SSID)) {
continue;
}
if (ssids.containsKey(scanResult.SSID)) {
continue;
}
ssids.put(scanResult.SSID, scanResult.SSID);
mScanResults.add(scanResult);
}
// mAdapter = new ArrayAdapter<>()
mHandler.post(new Runnable() {
@Override
public void run() {
refreshListView();
}
});
}
})).start();
}).start();
}
private void connectWifi(String ssid, String bssid, String pwd) {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
// Android 10
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
WifiNetworkSuggestion suggestion =
new WifiNetworkSuggestion.Builder()
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid)
.setWpa2Passphrase((pwd))
.setIsAppInteractionRequired(true)
@ -360,7 +318,6 @@ public class MainActivity extends AppCompatActivity {
@Override
public void onUnavailable() {
super.onUnavailable();
runOnUiThread(new Runnable() {
@Override
public void run() {
@ -402,19 +359,8 @@ public class MainActivity extends AppCompatActivity {
}
private void refreshListView() {
mAdapter = new WifiAdaper(this, getData(), R.layout.list_item, new String[] { "img", "text" },
new int[] { R.id.id_img, R.id.id_text });
binding.listView.setAdapter(mAdapter);
}
private List<Map<String, Object>> getData() {
mItems.clear();
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
String ssid = "";
if (wifiInfo != null) {
ssid = wifiInfo.getSSID();
@ -424,38 +370,43 @@ public class MainActivity extends AppCompatActivity {
}
}
}
for (ScanResult scanResult : mScanResults) {
Map map = new HashMap<String, Object>();
WifiInfoBean bean = new WifiInfoBean();
int signalLevel = WifiManager.calculateSignalLevel(scanResult.level, RSSI_LEVELS);
int drawableId = R.drawable.ic_wifi_signal_0;
boolean connected = TextUtils.equals(ssid, scanResult.SSID);
switch (signalLevel) {
case 1:
drawableId = connected ? R.drawable.ic_wifi_signal_1_green : R.drawable.ic_wifi_signal_1;
break;
case 2:
drawableId = connected ? R.drawable.ic_wifi_signal_2_green : R.drawable.ic_wifi_signal_2;
break;
case 3:
drawableId = connected ? R.drawable.ic_wifi_signal_3_green : R.drawable.ic_wifi_signal_3;
break;
case 4:
drawableId = connected ? R.drawable.ic_wifi_signal_4_green : R.drawable.ic_wifi_signal_4;
bean.setConnected(connected);
bean.setSignalLevel(signalLevel);
bean.setText(scanResult.SSID);
mItems.add(bean);
}
adapter.setItemList(mItems);
}
//每个item的点击事件
@Override
public void onItemClick(View v, int position) {
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
openWifiActivity();
}
//页面按钮的点击事件
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.refresh:
scanWifi();
break;
default:
drawableId = connected ? R.drawable.ic_wifi_signal_0_green : R.drawable.ic_wifi_signal_0;
case R.id.setting:
openSettingActivity();
break;
}
map.put("img", drawableId);
// if (scanR)
map.put("text", scanResult.SSID);
mItems.add(map);
}
return mItems;
}
class NetworkConnectChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
@ -551,7 +502,6 @@ public class MainActivity extends AppCompatActivity {
protected void openDeviceActivity() {
String ipAddressByWifi = null;
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager != null) {
ipAddressByWifi = Formatter.formatIpAddress(wifiManager.getDhcpInfo().ipAddress);
if (!wifiManager.isWifiEnabled()) {
@ -577,7 +527,14 @@ public class MainActivity extends AppCompatActivity {
}
}
private void openWifiActivity() {
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
wifiLauncher.launch(intent);
}
private void openSettingActivity() {
Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
settingLauncher.launch(intent);
}
private String normalizeSSID(String ssid) {
if (TextUtils.isEmpty(ssid)) {
return ssid;

@ -0,0 +1,45 @@
package com.xypower.mpremote;
import android.net.wifi.WifiNetworkSuggestion;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.content.Context;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
import java.util.Collections;
public class WifiConnector {
private final Context context;
private final WifiManager wifiManager;
public WifiConnector(Context context) {
this.context = context;
this.wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
@RequiresApi(api = Build.VERSION_CODES.Q)
public void suggestWifiNetwork(String ssid, String password) {
if (wifiManager == null) {
Toast.makeText(context, "Wi-Fi 服务不可用", Toast.LENGTH_SHORT).show();
return;
}
// 创建 Wi-Fi 网络建议
WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
.setSsid(ssid) // SSID
.setWpa2Passphrase(password) // 密码
.setIsAppInteractionRequired(true) // 需要用户交互
.build();
// 提交网络建议
int status = wifiManager.addNetworkSuggestions(Collections.singletonList(suggestion));
if (status == WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
Toast.makeText(context, "已建议连接到 Wi-Fi", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "无法建议连接到 Wi-Fi", Toast.LENGTH_SHORT).show();
}
}
}

@ -0,0 +1,112 @@
package com.xypower.mpremote.adapter;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.xypower.mpremote.R;
import com.xypower.mpremote.bean.WifiInfoBean;
import com.xypower.mpremote.interfaces.OnItemClickListener;
import java.util.ArrayList;
import java.util.List;
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> {
public OnItemClickListener listener;
private List<WifiInfoBean> itemList = new ArrayList<>();
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView title;
private OnItemClickListener listeners;
private ImageView img;
public MyViewHolder(View view, OnItemClickListener listener) {
super(view);
this.listeners = listener;
title = view.findViewById(R.id.id_text);
img = view.findViewById(R.id.id_img);
view.setOnClickListener(this);
}
public TextView getTitle() {
return title;
}
public ImageView getImg() {
return img;
}
@Override
public void onClick(View v) {
if (listeners != null) {
listeners.onItemClick(v, getAdapterPosition());
}
}
}
public void setOnClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public void setItemList(List<WifiInfoBean> list) {
this.itemList = list;
this.notifyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
return new MyViewHolder(view, listener);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
WifiInfoBean wifiInfoBean = itemList.get(position);
String text = wifiInfoBean.getText();
boolean connected = wifiInfoBean.isConnected();
int signalLevel = wifiInfoBean.getSignalLevel();
if (text.startsWith("XY") || text.startsWith("xy")) {
holder.getTitle().setTextColor(Color.RED);
holder.getTitle().setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
} else {
holder.getTitle().setTextColor(Color.BLACK);
holder.getTitle().setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));
}
holder.getTitle().setText(text);
int drawableId = R.drawable.ic_wifi_signal_0;
switch (signalLevel) {
case 1:
drawableId = connected ? R.drawable.ic_wifi_signal_1_green : R.drawable.ic_wifi_signal_1;
break;
case 2:
drawableId = connected ? R.drawable.ic_wifi_signal_2_green : R.drawable.ic_wifi_signal_2;
break;
case 3:
drawableId = connected ? R.drawable.ic_wifi_signal_3_green : R.drawable.ic_wifi_signal_3;
break;
case 4:
drawableId = connected ? R.drawable.ic_wifi_signal_4_green : R.drawable.ic_wifi_signal_4;
break;
default:
drawableId = connected ? R.drawable.ic_wifi_signal_0_green : R.drawable.ic_wifi_signal_0;
break;
}
holder.getImg().setImageResource(drawableId);
}
@Override
public int getItemCount() {
return itemList.size();
}
}

@ -0,0 +1,40 @@
package com.xypower.mpremote.bean;
public class WifiInfoBean {
String text;
int signalLevel;
boolean connected;
public int getSignalLevel() {
return signalLevel;
}
public void setSignalLevel(int signalLevel) {
this.signalLevel = signalLevel;
}
public boolean isConnected() {
return connected;
}
public void setConnected(boolean connected) {
this.connected = connected;
}
public WifiInfoBean() {
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}

@ -0,0 +1,5 @@
package com.xypower.mpremote.interfaces;
public interface CompleteCallback {
void onResult();
}

@ -0,0 +1,8 @@
package com.xypower.mpremote.interfaces;
import android.view.View;
public interface OnItemClickListener {
void onItemClick(View v, int position);
}

@ -0,0 +1,4 @@
package com.xypower.mpremote.utils;
public class WifiUtils {
}

@ -12,11 +12,10 @@
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:textSize="20dp"
android:text="请先连接到设备的热点"
android:textSize="20dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
@ -26,18 +25,43 @@
android:layout_marginTop="8dp"
android:text="(绿色图标为当前已连接热点)"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
/>
app:layout_constraintTop_toBottomOf="@+id/textView" />
<ListView
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintBottom_toTopOf="@+id/refresh"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<Button
android:id="@+id/refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="刷新wifi"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="@+id/guideline" />
<Button
android:id="@+id/setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="设置"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="@+id/guideline"
app:layout_constraintRight_toRightOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -1,19 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:orientation="horizontal" >
android:paddingRight="8dp"
android:paddingBottom="20dp">
<ImageView
android:id="@+id/id_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_wifi" />
<TextView
android:id="@+id/id_text"
android:layout_width="wrap_content"
@ -21,5 +27,5 @@
android:layout_marginLeft="8dp"
android:layout_marginTop="2dp"
android:text="" />
</LinearLayout>
</androidx.cardview.widget.CardView>

Loading…
Cancel
Save