cuốn sách gpt4 ai đã làm

android - Wi-Fi trực tiếp Android

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 12:37:13 27 4
mua khóa gpt4 Nike

Tôi muốn truyền tập tin giữa 2 thiết bị qua Wi-Fi Direct.

Tôi muốn làm điều tương tự như trong WifiDirectDemo, nhưng tôi không thể chuyển dữ liệu từ chủ sở hữu nhóm sang thiết bị khác, vì vậy tôi đã thử cách này: Mỗi khi một trong các thiết bị nhấp vào kết nối, thiết bị kia được đặt Là nhóm chủ sở hữu, do đó trên mỗi kết nối, thiết bị yêu cầu kết nối luôn là máy khách và có thể gửi dữ liệu.

Vấn đề là Android luôn ghi nhớ nhóm được tạo đầu tiên và do đó là chủ sở hữu nhóm của nó. Nói cách khác, những gì tôi làm chỉ hoạt động trong lần đầu tiên trừ khi tôi vào cài đặt và quên nhóm tôi đã tạo trong lần đầu tiên kết nối.

Tôi biết rằng bằng cách sử dụng nút ngắt kết nối, nhóm Wi-Fi sẽ bị xóa nhưng hệ thống Android sẽ đặt nhóm đó vào một nhóm đã ghi nhớ và sử dụng cài đặt của nhóm đó (thương lượng của chủ sở hữu nhóm) khi tạo kết nối mới.

Điều thứ hai tôi đã cố gắng là tạo ra một Ổ cắm máy chủ, để chủ sở hữu nhóm và các thiết bị khác vừa trở thành máy khách vừa là máy chủ. Tôi không biết có thể đặt chủ sở hữu nhóm làm khách hàng hay không nhưng tôi không thể tạo trên cả hai thiết bị Ổ cắm máy chủ. Đây là mã của tôi:


@Ghi đè
public void onConnectionInfoAvailable(thông tin WifiP2pInfo cuối cùng) {
if (progressDialog != null && ProgressDialog.isShowing()) {
ProgressDialog.dismiss();
}
this.info = thông tin;
this.getView().setVisibility(View.VISIBLE);

// IP của chủ sở hữu hiện đã được biết.
Chế độ xem TextView = (TextView) mContentView.findViewById(R.id.group_owner);
view.setText( getResources().getString(R.string.group_owner_text)
+ ((info.isGroupOwner == true) ? getResources().getString(R.string.yes)
: getResources().getString(R.string.no)));

// InetAddress từ cấu trúc WifiP2pInfo.
view = (TextView) mContentView.findViewById(R.id.device_info);
view.setText("IP của chủ sở hữu nhóm - " + info.groupOwnerAddress.getHostAddress());


// Sau khi đàm phán nhóm, chúng ta gán chủ sở hữu nhóm làm file
// server. Máy chủ tập tin là máy chủ đơn luồng, kết nối đơn.
// ổ cắm.
if (info.groupFormed && info.isGroupOwner) {
FileServerAsyncTask mới(getActivity(), mContentView.findViewById(R.id.status_text),8988)
.execute();
mContentView.findViewById(R.id.btn_start_client).setVisibility(View.VISIBLE);
Log.d(WiFiDirectActivity.TAG, "server8988cree");
} khác nếu (info.groupFormed) {
// Thiết bị kia đóng vai trò là máy khách. Trong trường hợp này, chúng tôi kích hoạt
// Nút lấy tập tin.
// Trong trường hợp này chúng ta tạo một server socket trên một cổng khác
FileServerAsyncTask mới(getActivity(), mContentView.findViewById(R.id.status_text),8987)
.execute();
mContentView.findViewById(R.id.btn_start_client).setVisibility(View.VISIBLE);
Log.d(WiFiDirectActivity.TAG, "server8987cree");
((TextView) mContentView.findViewById(R.id.status_text)).setText(getResources()
.getString(R.string.client_text));
}

Cảm ơn sự giúp đỡ của bạn.

câu trả lời hay nhất

Bạn có thể xóa tất cả các nhóm thông qua phản ánh, tuy nhiên, đây là một chút khó khăn và các thành viên trong lớp có thể thay đổi sau

 khoảng trống riêng tư xóaPersistentInfo() {
thử {

Lớp PersistInterface = null;

// Lặp lại và nhận lớp PersistentGroupInfoListener
for (Class classR : WifiP2pManager.class.getDeclaredClasses()) {
if (classR.getName().contains("PersistentGroupInfoListener")) {
PersistInterface = classR;
phá vỡ;
}

}

Phương thức cuối cùng deletePersistentGroupMethod = WifiP2pManager.class.getDeclaredMethod("deletePersistentGroup", new Class[]{Channel.class, int.class, ActionListener.class});




//lớp ẩn danh để triển khai PersistentGroupInfoListener có phương thức onPersistentGroupInfoAvailable
Đối tượng liên tụcInterfaceObject =
java.lang.reflect.Proxy.newProxyInstance(persistentInterface.getClassLoader(),
java.lang.Class mới[]{persistentInterface} mới,
java.lang.reflect.InvocationHandler() mới {
@Ghi đè
gọi đối tượng công khai (Proxy đối tượng, phương thức java.lang.reflect.Method, Object[] args) ném java.lang.Throwable {
Chuỗi Method_name = Method.getName();

if (method_name.equals("onPersistentGroupInfoAvailable")) {
Lớp wifiP2pGroupListClass = Class.forName("android.net.wifi.p2p.WifiP2pGroupList");
Đối tượng wifiP2pGroupListObject = wifiP2pGroupListClass.cast(args[0]);

Bộ sưu tập wifiP2pGroupList = (Bộ sưu tập) wifiP2pGroupListClass.getMethod("getGroupList", null).invoke(wifiP2pGroupListObject, null);
cho (Nhóm WifiP2pGroup: wifiP2pGroupList) {
deletePersistentGroupMethod.invoke(wifiP2pManager, kênh, (Integer) WifiP2pGroup.class.getMethod("getNetworkId").invoke(group, null), ActionListener() mới {
@Ghi đè
khoảng trống công khai trênSuccess() {
//Tất cả các nhóm đã bị xóa
}

@Ghi đè
khoảng trống công khai trênFailure(int i) {

}
});
}
}

return null;
}
});

Phương thức requestPersistentGroupMethod =
WifiP2pManager.class.getDeclaredMethod("requestPersistentGroupInfo", new Class[]{Channel.class, PersistInterface});

requestPersistentGroupMethod.invoke(wifiP2pManager, kênh, PersistentInterfaceObject);

} bắt (Ngoại lệ cũ) {
ex.printStackTrace();
}
}

Về kết nối trực tiếp android - Wi-Fi với Android, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/16372724/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress