未调用的覆盖方法

时间:2017-01-24 16:31:21

标签: android bluetooth-lowenergy

我的活动中有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中的那个。

1 个答案:

答案 0 :(得分:1)

Main未收到回调的原因是它从未设置过。 “覆盖”注释与它无关。

您正在调用此行来接收来自BLE的SPLASH回调:

  

MyBLE = new MDPtechBLE(this);

您需要将此调用移至Main类并将其实例作为参数传递。