2017-01-24 2 views
0

내 활동에 3 개의 클래스가 있으며, 첫 번째는 블루투스 연결을 처리하고 인터페이스를 통해 일부 값을 반환하는 BLEmanager입니다.무시 된 메서드가 호출되지 않습니다.

두 번째 것은 내가 스플래시라고 부르는 활동이며, LAUNCHER 활동입니다. 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를 호출 할 때,;

SPLASH

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 
} 

}

여기

스플래시, 콜백이 인터페이스 방법은에서 여기 BLEmanager

MainMaster

호출되면 트리거 주요 클래스 나는 모든 조각과 모든 처리 응용 프로그램의 나머지, 옳은 방법으로 모든 것을 할 내가 BLE 상태를 알고 싶습니다.이 클래스에서 SPLASH에있는 동일한 콜백을 구현해야합니다. 그래서 나는 SPLASH 확장에 대해 생각했다.

@Override 
public void StatoConnessioneCambiato(int stato) { 
int k=0; 
    k++; //BREAKPOINT 
} 

이것은 BLE 연결 상태를 알려주는 콜백입니다. BLEmanager에서 호출하는 경우 Splash 내부의 StatoConnessioneCambiato (bool) 만 트리거되고 MasterActivity 내부의 StatoConseioneCambiato (bool)는 트리거되지 않습니다.

+4

* 필요하면 저에게 물어보십시오. * 우리가 필요합니다 –

+0

여기에 코드가 있습니다.) –

답변

1

Main이 콜백을받지 못하는 이유는 설정 한 적이 없다는 것입니다. 오버라이드 주석은 아무 관계가 없습니다.

당신은 SPLASH에 대한 BLE에서 콜백을 받기 위해 줄을 호출 :

MyBLE = 새로운 MDPtechBLE (이);

이 호출을 Main 클래스로 옮기고 인스턴스를 인수로 전달해야합니다.

+0

고맙습니다. 정말 간단했습니다. –

관련 문제