Afficher les préférences depuis un évènement
Bonjour a vous.
Je tiens juste à préciser que je suis un débutant en java / android, il y a donc surement des boulettes qui traine dans mon code décrit, :?
je recherche désespérément depuis 2 jours sans rien trouver, pour afficher un preferencescreen suite à un événement.
En gros je souhaite créer un service, qui se lance au boot du téléphone cela fonctionne bien :
le code "d'écoute" :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
public class OnReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("TestApp", "juju : " + intent.getAction());
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
Log.d("TestApp", "Got the Boot Event>>>");
Log.d("TestApp", "Starting MySimpleService>>>");
context.startService(new Intent().setComponent(new ComponentName(context.getPackageName(), MonService.class.getName())));
}
//code à rajouter
} |
le code du service :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
public class MonService extends Service {
public MonService() {
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
Log.d("TestApp", ">>>onRebind()");
}
@Override
public void onCreate() {
super.onCreate();
Log.d("TestApp", ">>>onCreate()");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("TestApp", ">>>onStart()");
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
} |
jusque là tout va bien.
et quand mon service est lancé j'aimerai pouvoir le paramétrer, pour cela j'ai pensé à un truc qui serait bien sympa :
composer un numéro de téléphone, type code pin, et à l'appuie du bouton call, on regarde le numéro et, à la suite de cela soit la communication se fait, soit on la coupe pour afficher ensuite les préférences, c'est là que ca se gâte...
j'ai suivit un tuto qui fonctionne parfaitement pour afficher des préférences, puis ajouté un peu de code "d'écoute"
Code:
1 2 3 4 5 6 7 8 9
|
if ("android.intent.action.NEW_OUTGOING_CALL".equals(intent.getAction())) {
Log.d("TestApp", "APPEL Got the Boot Event>>>" + getResultData());
String number = getResultData();
if(number.equals("1234")){
} |
Seulement dans ma dernière condition if, je ne peux pas mettre le bout de code du tuto
Code:
addPreferencesFromResource(R.xml.prefs);
car la class n'est pas une extension de "PreferenceActivity" mais "BroadcastReceiver"
j'ai donc créé une nouvelle class comme dans le tuto par contre je n'ai rien fait la concernant dans le manifest :
Code:
1 2 3 4 5 6 7 8 9
|
public class PrefsActivity extends PreferenceActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
} |
et maintenant je cherche a appeler cette class, pour m'afficher les prefs... et là je seche.
j'ai testé ceci en me doutant du résultat :
Code:
1 2 3
|
PrefsActivity Pref = new PrefsActivity();
Pref.onCreate(null); |
et évidement cela plante avec les log que voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
04-25 13:07:18.383: D/TestApp(340): juju : android.intent.action.NEW_OUTGOING_CALL
04-25 13:07:18.383: D/TestApp(340): APPEL Got the Boot Event>>>258
04-25 13:07:18.383: D/TestApp(340): APPEL Starting MySimpleService>>>
04-25 13:07:18.804: D/AndroidRuntime(340): Shutting down VM
04-25 13:07:18.804: W/dalvikvm(340): threadid=1: thread exiting with uncaught exception (group=0x40015560)
04-25 13:07:18.843: E/AndroidRuntime(340): FATAL EXCEPTION: main
04-25 13:07:18.843: E/AndroidRuntime(340): java.lang.RuntimeException: Unable to start receiver com.note.OnReceiver: java.lang.NullPointerException
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1805)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.ActivityThread.access$2400(ActivityThread.java:117)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:981)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.os.Handler.dispatchMessage(Handler.java:99)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.os.Looper.loop(Looper.java:123)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-25 13:07:18.843: E/AndroidRuntime(340): at java.lang.reflect.Method.invokeNative(Native Method)
04-25 13:07:18.843: E/AndroidRuntime(340): at java.lang.reflect.Method.invoke(Method.java:507)
04-25 13:07:18.843: E/AndroidRuntime(340): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-25 13:07:18.843: E/AndroidRuntime(340): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-25 13:07:18.843: E/AndroidRuntime(340): at dalvik.system.NativeStart.main(Native Method)
04-25 13:07:18.843: E/AndroidRuntime(340): Caused by: java.lang.NullPointerException
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.Activity.onCreate(Activity.java:802)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:105)
04-25 13:07:18.843: E/AndroidRuntime(340): at com.note.PrefsActivity.onCreate(PrefsActivity.java:10)
04-25 13:07:18.843: E/AndroidRuntime(340): at com.note.OnReceiver.onReceive(OnReceiver.java:68)
04-25 13:07:18.843: E/AndroidRuntime(340): at android.app.ActivityThread.handleReceiver(ActivityThread.java:1794)
04-25 13:07:18.843: E/AndroidRuntime(340): ... 10 more |
voilà en espérant avoir été clair dans la description de mon besoin, je fais donc appel à votre savoir faire.
En vous remerciant par avance
Julien