2016-02-02 1 views
0

Dans ma classe publique BluetoothLeService étend son service, je le code suivant:findViewById est définie pour le type BluetoothLeService

private void updateTimeValues(BluetoothGattCharacteristic characteristic) { 
    TextView time = (TextView) findViewById(R.id.time); 
    time.setText(R.string.time); 

findViewById est définie pour le BluetoothLeService type. Je sais que la fonction est déclarée dans la classe Activity mais comment implémenter la fonction sans étendre la classe Activity.

Je suis un novice dans le développement Android si s'il vous plaît de détails que possible votre réponse :)

Merci!

+0

Le service n'a pas de vue. C'est un service d'arrière-plan qui est destiné à faire une tâche de longue haleine derrière la scène. – kopikaokao

+0

Utilisez la méthode 'updateTimeValues' d'Activity? –

Répondre

2

C'est correct. Le service n'a pas d'interface utilisateur. De la documentation

Un service est un composant d'application qui peut effectuer des opérations de longue durée en arrière-plan et ne fournit pas d'interface utilisateur.

vous pouvez utiliser un LocalBroadcastManager pour communiquer avec le Activity dont a commencé la Service afin de mettre à jour l'interface utilisateur

1

Comme vous ne serez pas en mesure d'accéder directement au textView du service, vous devez créer un récepteur de diffusion dans l'activité.

Dans votre service, appelez ce onCreate

myBroadcast = LocalBroadcastManager.getInstance(this); 

maintenant dans votre updateTimeValues() utilisation myBroadcast:

Intent intent = new Intent("myNewBroadcastIntent"); 
     intent.putExtra("newtime", "//value you want to send"); 
    myBroadcast.sendBroadcast(intent); 

maintenant créer récepteur dans le onCreate de votre MainActivity comme suit:

myReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String s = intent.getStringExtra("newtime"); 
     //now you can set it to the textView 
    } 
}; 

Et enregistrez-le surStart comme:

LocalBroadcastManager.getInstance(this) 
    .registerReceiver((myReceiver),new IntentFilter("myNewBroadcastIntent")); 

désinscriptions onStop comme:

LocalBroadcastManager.getInstance(this).unregisterReceiver(myReceiver); 
    super.onStop(); 

Hope this helps!