мой класс Java:
Код: Выделить всё
package com.example.myapplication;
import static android.net.wifi.p2p.WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION;
import static android.net.wifi.p2p.WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.net.wifi.p2p.WifiP2pManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
//public class WiFiDirectBroadcastReceiver
public class WiFiDirectActivity extends Activity{
// DeviceActionListener implements WifiP2pManager.ChannelListener
public static final String TAG = "wifidirectdemo";
// private boolean isWifiP2pEnabled = false;
// private boolean retryChannel = false;
// public Context context;
// private final IntentFilter intentFilter = new IntentFilter();
// private WifiP2pManager.Channel channel;
// private BroadcastReceiver receiver = null;
/**
* @param isWifiP2pEnabled the isWifiP2pEnabled to set
*/
// public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled) {
// this.isWifiP2pEnabled = isWifiP2pEnabled;
// }
private WifiP2pManager mWifiP2pManager;
private WifiP2pManager.Channel mChannel;
private IntentFilter mIntentFilter;
private BroadcastReceiver mReceiver;
public String Instance_name = "xxxxxx";
String Instance_Type = "yyy._tcp";
public static class WiFiDirectReceive extends BroadcastReceiver {
// WiFiDirectBroadcastReceive t = new WiFiDirectBroadcastReceive();
WifiP2pManager manager;
WifiP2pManager.Channel channel;
Context context1;
public WiFiDirectReceive(WifiP2pManager manager, WifiP2pManager.Channel channel, Context context1) {
this.manager = manager;
this.channel = channel;
this.context1 = context1;
// @Override
// public void onReceive (Context context, Intent intent){
//
// }
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast mess = new Toast(context);
mess.setText(action);
mess.show();
// Instance_name =action;
// if (action.equals(WIFI_P2P_STATE_CHANGED_ACTION)) {
// int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
// if (state != WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
// Toast mess = new Toast(context);
// mess.setText("no");
// mess.show();
// } else {
// Toast mess = new Toast(context);
// mess.setText("ok!");
// mess.show();
// }
//
// } else if (action.equals(WIFI_P2P_PEERS_CHANGED_ACTION)) {
//
// } else {
// }
}
}
public class fail extends WiFiDirectActivity implements WifiP2pManager.ChannelListener {
@Override
public void onChannelDisconnected() {
Toast.makeText(this,"disconnect!",Toast.LENGTH_LONG).show();
}
}
@RequiresApi(api = Build.VERSION_CODES.TIRAMISU)
@Override/* . de m o 2 s. c om */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
// mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
System.out.println(mWifiP2pManager);
mChannel = mWifiP2pManager.initialize(this, getMainLooper(), new fail());
mReceiver = new WiFiDirectReceive(mWifiP2pManager, mChannel, this);
Toast.makeText(this,mIntentFilter.toString(),Toast.LENGTH_LONG).show();
Toast.makeText(this,mReceiver.toString(),Toast.LENGTH_LONG).show();
}
/** register the BroadcastReceiver with the intent values to be matched */
@Override
public void onResume() {
super.onResume();
try{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
this.registerReceiver(mReceiver, mIntentFilter,RECEIVER_EXPORTED);
}
else {
Toast.makeText(this,"none",Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(this,"exc",Toast.LENGTH_LONG).show();
}
// unregisterReceiver(mReceiver);
}
@Override
public void onStop() {
super.onStop();
unregisterReceiver(mReceiver);
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
@Override
protected void onDestroy() {
super.onDestroy();
// дерегистрируем (выключаем) BroadcastReceiver
unregisterReceiver(mReceiver);
}
/**
* Remove all peers and clear all fields. This is called on
* BroadcastReceiver receiving a state change event.
*/
}
Код: Выделить всё
tools:ignore="ReservedSystemPermission" />
Код: Выделить всё
но когда я тестирую на реальном устройстве (при необходимости это redmi 9 и huawei psmart) приложение запускается и закрывается. У меня не появилось окно с ошибкой
Я пытался зарегистрировать получателя в манифесте.xml, но это тоже не сработало, подскажите, что делать
Подробнее здесь: https://stackoverflow.com/questions/793 ... pplication
Мобильная версия