Bonjour,

J'ai le besoin de créer un widget qui au final serait un simple bouton qui lorsque j’appuierais dessus il utilisera une méthode de mon mainActivity.

Alors j'ai essayé de mettre ça en place, mais dés que j'appui sur le widget une fois qu'il est en place cela me m'affiche "launcher 3 s'est arrêté"

Voici le code de ma classe qui étend de AppWidgetProvider :

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
public class MonWidget extends AppWidgetProvider {
 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
 
        // Pour chaque instance de notre AppWidget
        for (int i = 0 ; i < appWidgetIds.length ; i++) {
            // On crée la hiérarchie sous la forme d'un RemotViews
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
 
            // On récupère l'identifiant du widget actuel
            int id = appWidgetIds[i];
            // On met à jour toutes les vues du widget
            appWidgetManager.updateAppWidget(id, views);
        }
    }
}
Voici le appwidget-provider :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="146dp"
android:minHeight="72dp"
android:initialLayout="@layout/widget_layout"
android:updatePeriodMillis="10">
</appwidget-provider>
voici le layout :
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:layout_margin="4dp">
<Button
    android:id="@+id/alerte_btn_wid"
    android:layout_width="146dp"
    android:layout_height="72dp"
    android:layout_centerInParent="true"
    android:background="@layout/bouton_appui"
    android:text="ALERTE !"
    android:onClick="clikBtnAlerte" />
</LinearLayout>
et enfin voici la déclaration dans le manifest :

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.iris1.sdrp_top_1" >
 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="android.permission.WRITE_CALENDAR" />
 
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo.Light.DarkActionBar" > >
 
        <service android:enabled="true"
            android:name=".Service_GPS"
            />
        <activity
            android:screenOrientation="portrait"
            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>
 
        <activity
            android:screenOrientation="portrait"
            android:name=".PermissionGps"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
        <!-- Notre AppWidget -->
        <receiver android:name=".MonWidget">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                android:resource="@xml/widget" />
        </receiver>
 
    </application>
 
</manifest>

voici le logcat :
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
35
36
05-26 12:18:37.624  13217-13217/com.example.iris1.sdrp_top_1 D/AndroidRuntime﹕ Shutting down VM
05-26 12:18:37.628  13217-13217/com.example.iris1.sdrp_top_1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.iris1.sdrp_top_1, PID: 13217
    java.lang.RuntimeException: Unable to instantiate receiver com.example.iris1.sdrp_top_1.MonWidgetAlerte: java.lang.ClassNotFoundException: Didn't find class "com.example.iris1.sdrp_top_1.MonWidgetAlerte" on path: DexPathList[[zip file "/data/app/com.example.iris1.sdrp_top_1-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2589)
            at android.app.ActivityThread.access$1800(ActivityThread.java:147)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.iris1.sdrp_top_1.MonWidgetAlerte" on path: DexPathList[[zip file "/data/app/com.example.iris1.sdrp_top_1-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
            at android.app.ActivityThread.handleReceiver(ActivityThread.java:2584)
************at android.app.ActivityThread.access$1800(ActivityThread.java:147)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)
************at android.os.Handler.dispatchMessage(Handler.java:102)
************at android.os.Looper.loop(Looper.java:135)
************at android.app.ActivityThread.main(ActivityThread.java:5254)
************at java.lang.reflect.Method.invoke(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:372)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
    Suppressed: java.lang.ClassNotFoundException: com.example.iris1.sdrp_top_1.MonWidgetAlerte
            at java.lang.Class.classForName(Native Method)
            at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
            at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
            ... 11 more
     Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
05-26 12:18:42.856  13217-13217/com.example.iris1.sdrp_top_1 I/Process﹕ Sending signal. PID: 13217 SIG: 9

Merci par avance )