BroadcastReceiver не работает в приложенииJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 BroadcastReceiver не работает в приложении

Сообщение Anonymous »

Недавно я столкнулся с проблемой: я добавил приемник широковещательных намерений, чтобы показывать изменения состояния Wi-Fi
мой класс 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.
*/

}
а также указал намерения в манифесте.xml

Код: Выделить всё



tools:ignore="ReservedSystemPermission" />
































как я узнал, этот код не работает после регистрации моего ресивера в эмуляторе (android api 30) в Android Studio все работает нормально
но когда я тестирую на реальном устройстве (при необходимости это redmi 9 и huawei psmart) приложение запускается и закрывается. У меня не появилось окно с ошибкой
Я пытался зарегистрировать получателя в манифесте.xml, но это тоже не сработало, подскажите, что делать

Подробнее здесь: https://stackoverflow.com/questions/793 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»