Credo che la cosa migliore sia chiamare un service direttamente. Creare un Broadcast Receiver potrebbe avere senso se si volessero attivare più azioni contemporaneamente, o se si volesse intercettare un broadcast dal sistema.
Teniamo fermo questo aspetto.
E le acquisizioni che abbiamo fatto finora.
Dunque, mi devo esercitare nel binding di un service.
Focalizziamoci solo sopre ai services.
Ho creato un Service, in una classe a parte: la costruzione è piuttosto facile, implementando la classe Service: infatti si viene guidati fino a questo punto semplicemente implementando:
public class Servizio extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
Ora ricordiamo che il Service si deve registrare.Come si registra nel Manifest?
Io ricordo questo:
......
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="Servizio" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
......
Ma vediamo se ricordo bene e soprattutto se è sufficiente...S', va bene ma c'erano altre opzioni, che forse servono sia a permettere che il service sia chiamato da altre applicazioni sia a evitare che venga chiamato a sproposito...
Esploriamole. Non mi ricordo com'è che si chiamano...
Va bene, ma c'è anche l'opzione android:enabled che devo verificare.
Un'altra che non capisco è android:icon.
Il service, infatti, essendo un'operazione in background, che bisogno avrebbe di un'icona?
Credo sia relativo alla status bar... ma al momento lasciamo perdere...
Provo a chiamare un service così.
Sempre con il Toast, altimenti con il tts è troppo difficile. Mi eserciterò sempre con i toast, per il momento.
Ecco, ho aggiunto al Service l'evento onStartCommand:
public class Servizio extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flage, int startUI){
Toast.makeText(this, "SERVIZIO CHIAMATO", Toast.LENGTH_LONG).show();
return startUI;
}
}
E lo chiamo, dallo stesso package, così:
public class MainActivity extends Activity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),Servizio.class);
startService(intent);
}
});
}
}
Non ha funzionato perché ho dimenticato di istanziare la variabile button....Ci ho riprovato e ho scoperto che non avevo avviato quella app ma un'altra!!!!!!!!
Riproviamo con tutti i codici a posto:
MainActivity:
public class MainActivity extends Activity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(getApplicationContext(),Servizio.class);
startService(intent);
}
});
}
}
Servizio:
public class Servizio extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flage, int startUI){
Toast.makeText(this, "SERVIZIO CHIAMATO", Toast.LENGTH_LONG).show();
return startUI;
}
}
FUNZIONA!
Bene, ho creato un service, l'ho registrato e l'ho chiamato dalla stessa app. Funziona!
Nessun commento:
Posta un commento