S
sem_thesis
Fortgeschrittenes Mitglied
- 0
Hallo! 
Wie der Threadtitel schon sagt: Ich möchte einen Service laufen lassen, sobald Nexus One fertig bootet, falls der User den Service ausgewählt hat.
Ich beschreibe kurz was ich gemacht habe und wo ich nicht mehr weitergekommen bin:
1) Der Service ist in der Klasse UpdaterService.class implementiert
2) Der User kann in der UserPrivacyOptions.class auswählen, ob er diesen Service aktivieren möchte (CheckBoxPreference cPhone: nimmt Wert 0 oder 1 an )
3) Nun habe ich eine Receiverklasse eingebaut namens StartAtBootServiceReceiver.class, die auf Phoneboot reagiert und den Service startet. Ich habe folgenden Tutorial zu Hilfe genommen: Starting an Android Service at Device Boot — Greg Fiumara
So weit, so gut.
4) Jetzt kommt der schwierige Teil: StartAtBookServiceReceiver.class soll nur reagieren falls cPhone.isChecked den Wert 1 ergibt, sonst soll der Service nicht starten.
Konsequenz: Sofort nach dem Booten --> APP-CRASH!
Hat jemand 'ne Idee wie man das tweaken kann?
Kommentare sind willkommen : )
PS: Sourcecode ist im Attachment als zip-File fürs Testen eingebettet.
Wie der Threadtitel schon sagt: Ich möchte einen Service laufen lassen, sobald Nexus One fertig bootet, falls der User den Service ausgewählt hat.
Ich beschreibe kurz was ich gemacht habe und wo ich nicht mehr weitergekommen bin:
1) Der Service ist in der Klasse UpdaterService.class implementiert
2) Der User kann in der UserPrivacyOptions.class auswählen, ob er diesen Service aktivieren möchte (CheckBoxPreference cPhone: nimmt Wert 0 oder 1 an )
Code:
package com.semesterproject.socialmine;
import android.content.Intent;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;
import android.widget.Toast;
public class UserPrivacyOptions extends PreferenceActivity implements OnPreferenceClickListener {
/* Assign a variable name to every feature i.e. preference */
public CheckBoxPreference cPhone;
/* The onCreate Method loads all Privacy Options and sets a Listener on the each of them */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Load graphical layout from res/layout/userprivacyoptions.xml directory */
addPreferencesFromResource(R.layout.userprivacyoptions);
/* Assign variables to the corresponding checkbox given in 'android:key=".."' of userprivacyoptions.xml */
cPhone = (CheckBoxPreference) findPreference("checkboxPhone");
/* Make all preferences 'listenable', i.e. to check their state and act accordingly */
cPhone.setOnPreferenceClickListener(this);
/* Initialize all Services */
if (cPhone.isChecked())
{
startService(new Intent(this, UpdaterService.class));
} else {
stopService(new Intent(this, UpdaterService.class));
}
}
/* The onPreferenceClick Method reacts to a User Click by either activating or deactivating services */
public boolean onPreferenceClick(Preference preference) {
if (cPhone.isChecked())
{
startService(new Intent(this, UpdaterService.class));
Toast.makeText(getBaseContext(), "Activating Phone Mining now!",Toast.LENGTH_LONG).show();
} else {
stopService(new Intent(this, UpdaterService.class));
Toast.makeText(getBaseContext(), "Deactivating Phone Mining now!",Toast.LENGTH_LONG).show();
}
return true;
}
}
So weit, so gut.
4) Jetzt kommt der schwierige Teil: StartAtBookServiceReceiver.class soll nur reagieren falls cPhone.isChecked den Wert 1 ergibt, sonst soll der Service nicht starten.
Code:
package com.semesterproject.socialmine;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.preference.CheckBoxPreference;
/* This class collects privacy settings from UserPrivacyOptions.class
* and starts the respective Service at bootup is enabled */
public class StartAtBootServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
/* This only enables the Service if cPhone is true
* Somehow the app crashes when I use this code, so I commented it for now
* Can you find any mistakes or another way to do this?
UserPrivacyOptions u = new UserPrivacyOptions();
CheckBoxPreference cp = u.cPhone;
if (cp.isChecked()) {
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent i = new Intent();
i.setAction("com.semesterproject.socialmine.UpdaterService");
context.startService(i);
}
}
}
}
Hat jemand 'ne Idee wie man das tweaken kann?
Kommentare sind willkommen : )
PS: Sourcecode ist im Attachment als zip-File fürs Testen eingebettet.