我的活动中有3个类,第一个是处理蓝牙连接并通过接口返回一些值的BLEmanager。
第二个是我称之为泼水的活动,它是启动活动。 Splash扩展了AppCompactActivities并实现了BLEmanager接口,因此我可以在建立连接时调用第三个活动。 现在所有的接口方法都在这个类中,但是我希望它们在第三个类中触发一些东西。
第三个类是一个名为Main的活动,包含应用程序的核心和所有功能。这个类扩展了Splash。多亏了这个事实,我认为我可以覆盖已经在Splash内部的接口方法。
我不知道为什么但是当我从BLEmanager调用一个接口方法时,只触发Splash类中的方法,而不是Main方法。
代码很混乱,所以我没有发布,问我是否需要。
非常感谢你。
编辑:
这里的代码,注释和变量名称都是意大利语
BLEmanager
public class MDPtechBLE {
private int MY_PERMISSION_LOCATION=1;
private Context context;
private Activity activity; //contesto e activity della applicazione
private CallBacksBLE CB_BLE; //Interfaccia di Callback
private BluetoothGatt GATT;
//Variabili Strettamente legate al Bluetooth
private static BluetoothAdapter myBlueAdapt; //Adapter del BLE, rappresenta il modulo HW del BLE
private Intent enableBtIntent;
private ScanCallback myScanCallBack; //NUOVA CALLBACK
private BluetoothAdapter.LeScanCallback myLeScanCallBack; //VECCHIA CALLBACK
public BluetoothDevice DISPOSITIVOCONNESSO;
//variabi utili
private int TempoScansione=1000;
private boolean MitragliatriceState=false;
//Liste
private List<ScanResult> ListaDeiRisultatiTrovatiDallaScansione; //Nuova Lista di device trovati dalla scansione
private List<BluetoothGattService> ListaServizi;
private List<BluetoothGattCharacteristic> ListaTutteLeCaratteristiche;
private List<BluetoothGattCharacteristic> ListaCaratteristicheSCRITTURA;
private List<BluetoothGattCharacteristic> ListaCaratteristicheLETTURA;
List<PacchettoScrittura> Coda;
//Devo tenere in memoria tutte le Caratteristiche che mi serviranno, PARLARNE CON GIACOMO A PROPOSITO, devono essere pubbliche per essere raggiunte anche dai frammenti
public MDPtechBLE(Context context)
{
ListaServizi = new ArrayList<>();
this.context=context;
activity = (Activity)context;
this.CB_BLE = (CallBacksBLE)context;
initVariabiliScansione();
Log.i("BLE","inizializzato");
Start();
}
在这个类中,有处理我的BLE连接的所有方法。
**回调界面**
public interface CallBacksBLE {
//BLUETOOTH
void BluetoothStato(Boolean stato);
void BleError(int ErrorCode);
//GATT
void StatoConnessioneCambiato(int stato);
void ViaLibera(List<BluetoothGattCharacteristic> ListaCaratteristicheSCRITTURA, List<BluetoothGattCharacteristic> ListaCaratteristicheLETTURA);
void RisultatoLettura(byte[] data, BluetoothGattCharacteristic CharLetta);
void Notifica(byte[] data, BluetoothGattCharacteristic CharNotificata);
}
例如,当连接状态改变时,我调用CB_BLE.StatoConnessioneCambiato('当前连接状态');
闪
public class Splash extends AppCompatActivity implements CallBacksBLE{
private Intent mainIntent;
public static MDPtechBLE MyBLE;
//Variabili Resume Pause
public static boolean CambioActivityEffettuato;
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.splashscreen_xlink);
startLockTask();
if(MyBLE==null){
Log.i("Splash","Creazione");
MyBLE = new MDPtechBLE(this);
}
mainIntent = new Intent(Splash.this,MasterActivity.class);
}
@Override
public void onResume() {
super.onResume();
Log.e("DEBUG", "onResume of Splash");
}
@Override
public void onPause() {
super.onPause();
Log.e("DEBUG", "OnPause of Splash");
}
Boolean InRicerca=false;
@Override
public void BluetoothStato(Boolean Stato) {
if(Stato && !InRicerca) {
InRicerca=true;
MyBLE.Cerca_e_Connetti();
}
}
@Override
public void BleError(int ErrorCode) {
}
@Override
public void StatoConnessioneCambiato(int stato) {
int i=0;
i++; //BREAKPOINT
}
@Override
public void ViaLibera(List<BluetoothGattCharacteristic> ListaCaratteristicheSCRITTURA, List<BluetoothGattCharacteristic> ListaCaratteristicheLETTURA) {
CambioActivityEffettuato=true;
Splash.this.startActivity(mainIntent);
Splash.this.finish();
MyBLE.SetMitragliatriceState(true);
}
@Override
public void RisultatoLettura(byte[] data, BluetoothGattCharacteristic CharLetta) {
}
@Override
public void Notifica(byte[] data, BluetoothGattCharacteristic CharNotificata) {
}
@Override
public void onBackPressed() {
// nothing to do here
// … really
}
}
在splash中,一旦从BLEmanager
调用接口方法,就会触发回调MainMaster
这里在主类我处理所有片段和应用程序的所有其余部分,以正确的方式完成所有事情我需要知道BLE状态,知道我需要在这个类中实现的BLE状态相同SPLASH中的回调。所以我想到了扩展SPLASH。
@Override
public void StatoConnessioneCambiato(int stato) {
int k=0;
k++; //BREAKPOINT
}
这是告诉我BLE连接状态的回调。 如果我从BLEmanager中调用它,只会触发Splash中的StatoConnessioneCambiato(bool)而不是MasterActivity中的那个。
答案 0 :(得分:1)
Main
未收到回调的原因是它从未设置过。 “覆盖”注释与它无关。
您正在调用此行来接收来自BLE的SPLASH
回调:
MyBLE = new MDPtechBLE(this);
您需要将此调用移至Main
类并将其实例作为参数传递。