Uruchamianie metody z widgetu android

0

Czesc, probuje po kliknieciu w widget uruchomić metode:

 @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);

            Intent intent = new Intent("com.myapp.button_press").addCategory("com.myapp");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
            views.setOnClickPendingIntent(R.id.appwidget_text, pendingIntent);
            // Get the layout for the App Widget and attach an on-click listener
            // to the button


            // Tell the AppWidgetManager to perform an update on the current app widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }

   
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if ("com.myapp.button_press".equals(action)) {
            // First handle your special intent action
   GPS gps = new GPS(context);
            gps.checkLocation();

        } else {
            // otherwise let Android call onUpdate
            super.onReceive(context, intent);
        }
    } 

metoda do ktorej sie odwoluje:

 public boolean checkLocation() {
        if (!isLocationEnabled())
            showSettingsAlert();
        return isLocationEnabled();
    }

    private boolean isLocationEnabled() {
        return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    }
 public void showSettingsAlert(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

        // Setting Dialog Title
        alertDialog.setTitle("GPS is settings");

        // Setting Dialog Message
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

        // On pressing Settings button
        alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                mContext.startActivity(intent);
            }
        });

        // on pressing cancel button
        alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        // Showing Alert Message
        alertDialog.show();
    }
 

i dostaje blad:

FATAL EXCEPTION: main
                                                                              Process: com.a, PID: 4860
                                                                              java.lang.RuntimeException: Unable to start receiver com.a.NewAppWidget: java.lang.NullPointerException
                                                                                  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2426)
                                                                                  at android.app.ActivityThread.access$1700(ActivityThread.java:135)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:136)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5017)
                                                                                  at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                  at java.lang.reflect.Method.invoke(Method.java:515)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                                                                                  at dalvik.system.NativeStart.main(Native Method)
                                                                               Caused by: java.lang.NullPointerException
                                                                                  at android.content.ContextWrapper.getTheme(ContextWrapper.java:125)
                                                                                  at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:143)
                                                                                  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:360)
                                                                                  at com.a.GPS.showSettingsAlert(GPS.java:182)
                                                                                  at com.a.GPS.checkLocation(GPS.java:165)
                                                                                  at com.a.NewAppWidget.onReceive(NewAppWidget.java:71)
                                                                                  at android.app.ActivityThread.handleReceiver(ActivityThread.java:2419)
                                                                                  at android.app.ActivityThread.access$1700(ActivityThread.java:135) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1272) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                  at android.os.Looper.loop(Looper.java:136) 
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5017) 
                                                                                  at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                  at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                                                                                  at dalvik.system.NativeStart.main(Native Method)  

co robie zle? gdy zamiast do metody wyswietlam Toasta to wszystko dziala

0

NullPointerException, brakuje Ci utworzenia obiektu. Jako że widget jest servicem pewnie ginie Ci obiekt. A jeszcze jedno, nie da się otworzyć dialogu z widgetu, no chyba, że najpierw wystartujesz Activity.

1 użytkowników online, w tym zalogowanych: 0, gości: 1