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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
PrefsActivity Pref = new PrefsActivity();
Pref.onCreate(null);
et évidement cela plante avec les log que voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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