widgets programmieren

K

k3nscher

Erfahrenes Mitglied
20
Hallo,
bin gerade dabei mir ein Programm zu schreiben welches den Stundenplan von der Uni downlädt und auf meinem Handy anzeigt. Fehlt nurnoch ein widget dazu.. hat da jemand ein Tutorial oder so?

Sollte ja nich schwer sein. Schätze muss im Manifest deklariert werden und dann kommt irgendwohin noch ne onupdate() funktion oder so...

Danke euch für die Hilfe
 
Hi.

Schau mal hier im Android Dev. Blog.

Die Seite (also nicht unbedingt der Blog) sollte bei sowas immer der erste Anlaufpunkt sein.

Gruß,
Shini
 
  • Danke
Reaktionen: k3nscher
Super!!! Wieder was gelernt. Klasse Seite..
 
Es hilft nichts, ich brauch trotzdem eure hilfe... Ich bekomm das Widget nich zum laufen.. was ich schon habe:

Das Hauptprogramm
Code:
public class hello extends Activity {
    /** Called when the activity is first created. */
    @SuppressWarnings("unchecked")
    @Override
        
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//usw........
Dann den Eintrag in die Manifest Datei
Code:
<receiver android:name="AppWidgetProvider" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
               android:resource="@xml/widget" />
</receiver>
Dann die widget.xml Datei in /xml/
Code:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android">
    android:minWidth="294dp" <!-- density-independent pixels -->
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000" <!-- once per day -->
    android:initialLayout="@layout/appwidgetlayout"
    android:configure="com.example.android.ExampleAppWidgetConfigure" >
</appwidget-provider>
und die appwidgetlayout.xml Datei
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<TextView android:text="TextView01" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
mit der layoutdatei bin ich mir nich so ganz sicher ob das passt.... also zumindest wird das widget nicht unter widgets angezeigt wenn man das programm installiert.
Wo und wie bring ich jetz die onupdate methode rein? Hab wirklich schon viel gegoogelt aber irgendwie hab ich irgendwo noch nen denkfehler Bzw der mekkert bei dem was ich mit dem onupdate probiert hab dass das an der stelle nich geht.
 
Welche Fehlermeldung bekommst du denn beim debuggen?
 
Guten Morgen.

Ich glaube ein Hauptprogramm, das von Activity erbt braucht man für nen Widget nicht. Höchstens, wenn man noch nen Konfigscreen zur Verfügung stellt. Ansonsten gibt man eine Klasse an, die von AppWidgetProvider erbt und die zugehörige onUpdate() Methode überschreibt. Diese Klasse müsste man hier
PHP:
<receiver android:name="NameDeinerKlasse" >
angeben.

Ich schlage vor Du lädst Dir mal den kompletten Source von dem Widget-Beispiel aus dem Blog runter und modifizierst das Stück für Sück um Dich mit dem Gesamtkonstrukt vertraut zu machen. Falls Du den Link übersehen haben solltest: SimpleWiktionary Sample

Grüße,
Shini
 
Also wahrscheinlich seh ich den Wald vor lauter Bäumen nicht...

Ich hab ein Activity und ein Widget.... Das Activity hab ich ja schon definiert mit

Code:
public class hello extends Activity {
    /** Called when the activity is first created. */
    @SuppressWarnings("unchecked")
    @Override
        
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//usw........

Wo kommt jetzt der Code für das Widget?

Da merkt man mal wie man das gespür für den Syntax verliert wenn man zu viel mit Visual Studio und so programmiert. Der macht das alles automatisch...

Also etwas genauer die Frage: Wo kann ich die Widgetklasse überschreiben wenn das mein Quelltext ist:

Code:
package domi.android;



import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import android.R.string;
import android.app.Activity;
import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.*;
import android.text.format.Time;
import android.view.*;
import android.view.View.OnClickListener;

public class hello extends Activity {
    /** Called when the activity is first created. */
    @SuppressWarnings("unchecked")
    @Override
        
    
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
//hier ist der Quelltext fürs Activity 
    }

};
 
}
 
Ich hab's wie folgt verstanden:

Man benötigt eine Klasse, die die Update-Funktionalität bereitstellt - nennen wir sie z.B. WidgetUpdater. Diese Klasse erbt von AppWidgetProvider und überschreibt zumindest mal deren onUpdate()-Methode:

Code:
public class WidgetUpdate extends AppWidgetProvider {
 @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
 // Update Widgetcontent
 }
 }
Diese Klasse gibt man dann in der XML als Broadcast-Receiver an:

Code:
<receiver android:name="WidgetUpdater" >
...
</receiver>
AppWidgetProvider bietet wie man der Doku entnehmen kann noch mehr Methoden an, die man bedarfsweise überschreiben kann. (weitere Doku)

Eine Klasse, die von Activity erbt benötigt man imho nicht.

Gruß,
Shini
 
Hey Danke, das is klar. Meine Frage ist wahrscheinlich viel zu lächerlich, wo im Quelltext kommt die klasse die appwidgetprovider überschreibt hin... also in eine neue datei mit verweis in die Hauptdatei wo mein Activity ist oder unter das Activity?

edit: Wenn ich die Klasse unter die Activity Klasse mache kommt der Fehler:

The public type UpdateProvider must be defined in its own file

edit2: Verdammt ich habs... ich hab das immer versucht als outerclass zu definieren und hab natürlich public vorgeschrieben was ja totaler unsinn is, weil ja nur die main public sein darf.

Jetz ist nurnoch die Frage warum das Widget nicht in der Widgetlist angezeigt wird....

edit3: Auch das letzte Problem gelößt... falsch definiert in der manifest
 
Zuletzt bearbeitet:
Ok die Frage war für mich wirklich missverständlich gestellt.

Aber cool, dass es jetzt klappt :)

Gruß,
Shini
 
mhh..stundenplan von der uni downloaden genau sowas suche ich auch !!
kannst du es vielleich zur verfügung stellen ?
 
Die Frage ist ja, welches System eure Uni nutzt.. Campus.Net oder ähnliches?

Weiterhin sind Widgets auch stark limitiert - keine ScrollBars
 
basierend auf CAMPUSonline ist unser unidings ;)
aber man müsste ja eigentlich nur das einloggen und das downloaden des stundenplans automatisieren.
 

Ähnliche Themen

R
  • Gesperrt
  • roland-senior
Antworten
3
Aufrufe
965
swa00
swa00
R
Antworten
9
Aufrufe
779
koje71
koje71
Zurück
Oben Unten