Wäre wohl gut, wenn du deinen Lösungsweg hier auch noch mit uns Teilst, falls nochmal jemand das selbe Problem hat
Beiträge von Funtik
-
-
-
Hat wohl noch niemand Erfahrungen mit gemacht?
Habs jetzt alles in die OnCreate Methode gepackt. scheint zu funktionieren. Der Service beendet sich auch selbst am Ende der onCreate Methode.
-
Hast du auch den Pfad zum AndroidSDK angepasst?...
-
Hi Leute,
Ich bin grad dabei einen Service zu basteln. Um auf dem richtigen Weg zu gehen möchte ich mal fragen, wie das abläuft.
Android Buch und Video haben mir schon Ansätze gegeben. Aber ich würde gerne trotzdem konkret fragenAlso der Service soll auf eine meiner Tabellen zugreifen und diese Abarbeiten. (while (cursor.moveToNext())
Und zwar sind in der Tabelle Nummern drin, an welche jeweils eine SMS verschickt werden soll. Das ist alles kein Problem.
Ich möchte aber auch noch, dass in der NotificationBar der Aktuelle Stand angezeigt wird. Also z.B.: "3 von 5 SMS verschickt"
Text und Inhalt ist erstmal nicht wichtig.
Wenn man auf diese Notification klickt, soll man auf die Activity gelangen, von der dieser Service aus gestartet wurde.Bedeutet: der Service soll laufen, auch wenn meine Activity/bzw. die App nicht läuft. Und auch laufen, wenn die App läuft.
Wenn die Activity Sichtbar ist, dann wird eine Liste mit den Nummern angezeigt, Dort soll eine Progressbar Sichtbar sein, solange die SMS an die jeweilige Nummer noch nicht verschickt ist.Kann mir jemand einige Hinweise und Schritte geben, Wo ich Was reinprogrammieren soll? Also in welche Methoden.
Bin grad dabei in die onCreate() Methode von meiner Service Klasse die Schleife zum SMS versenden reinzubauen... -
Ja.. das ist mein erstes Java/Android Projekt... ich fürchte mich noch etwas vor solchen Gebieten, da ich die Grundlagen vom normalen noch nicht mal drauf hab
Mal ne andere Frage zum ContactsContract Provider...
Momentan speichere ich den lookup_key für jeden Kontakt, und nicht seine _ID. Der lookup_key ist allerdings ein String und deswegen dauern Abfragen etwas länger.
Was würdet ihr empfehlen, den Lookup_key oder doch besser die _ID zu speichern?
Das problem bei der ID ist, dass sie sich für nen Kontakt schnell ändern kann. Schon wenn man zwei Kontakteinträge miteinander verknüpft, hat dieser dann schon ne neue ID. Der Lookup_key ist da ja eindeutiger. Oder doch besser beides Speichern?
Wie macht ihr das so? -
Ja das hab ich mir schonmal angesehen und ist auch sehr interessant... aber habs nicht weiter vertieft, weil da steht, dass es erst ab API 11 funktioniert... ich möchte meine App jedoch gerne für API 7 verfügbar machen
-
Danke dir. Das mit dem Bild klappt super muss ich allerdings wohl in nen hintergrund Thread machen oder so... habe mal gelesen dass sowas geht, damit die Liste beim scrollen nicht so hakt.
Mit ContactsContract Provider habe ich ja bisher auch alles gemacht. Nur hatte gehofft, dass es eine fertige Klasse gibt, auf die ich zurückgreifen könnte.
Aber dann sei mir damit erstmal geholfen. Danke dir!
-
Hallo,
ich bräuchte einen Tipp, wie ich am besten Kontaktfoto und Nummern anzeigen lassen kann.
Eigentlich brauche ich eine Liste, die ganz genauso ist wie in der Kontakte App. Nur mit dem Zusatz, dass ich da Kontakte bzw. ganze Gruppen auswählen kann, und beim Auswählen soll die ID (bzw. der Lookup_key) in meine SQL DB geschrieben werden.
Wenn das nicht funktioniert wird meine App ein totaler Reinfall, denn wegen schlechter Bedienbarkeit wird sie dann keiner benutzen wollen. Ich selbst wohl nicht mal.
Kennt da jemand gute Informationsquellen, die ich mir ansehen könnte?
Bei der App "Handsent SMS" funktioniert das mit den Gruppen nicht ganz so gut. Scheint dass es wohl nicht ganz so einfach ist(?) -
in der Main.java Klasse wird in der OnCreate Methode auf eine XML Datei zugegriffen, die du nicht hast. Jedenfalls konnte ich sie bei dir nicht finden
Code
Alles anzeigen@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_item); }
Hast du vielleicht eine Datei irgendwie manuell umbenannt oder gelöscht?
müsste hier jedenfalls (wahrscheinlich) R.layout.activity_main heißen.Und in der ThirdActivity.java Klasse wird ebenfalls auf die selbe XML Datei zugegriffen. Muss dort R.layout.activity_third sein.
//edit:
einfach ausgedrückt: durch setContentView(R.layout.activity_list_item); holst du dir die XML Datei namens "activity_list_item.xml" in deine Java Klasse. Dadurch wird die sichtbare Oberfläche aufgebaut, so wie du sie dir in der XML Datei erstellt hast. Da sie nicht existiert kommt wohl der Fehlerzu den Fragen...
2.
Weil in setContentView(..) nicht auf die richtige Datei zugegriffen wird, wie oben erklärt.Die anderen Fragen überlasse ich lieber den Erfahreneren Leuten hier
-
@ Lucas:
Klingt interessant... weist du.. gerade wenn von Access kommt, dann sind Datenbanken/Tabellen "Die Lösung" für fasst jedes Problem.
Was hättest du denn als Alternative um Daten zu speichern, die schnell und einfach wieder abrufbar sein sollen?
-
Hi Katsche,
ich tu auf der Arbeit auch hauptsächlich Access mit VBA entwickeln. Ich habe letztes Jahr angefangen mit Android und damit dann auch mit Java. Kann also sehr wohl nachvollziehen, wie es dir beim lernen geht
VBA und Java sind komplett andere Welten. Du musst in Java Dinge beachten (und dich selbst drum kümmern), wo du dir bei VBA nichtmal einen Hauch von Gedanken darüber machst.
Ich könnte jetzt so viele Gegenüberstellungen machen... und hab erst auch schon angefangen. Aber das bringt alles nix. Du musst dir wirklich mal Java beibringen. Den Grundaufbau der Sprache und vor allem den Aufbau als Objektorientierte Sprache. Darin liegt der Hauptunterschied.
Würde auch dringends empfehlen 2-3 Wochen erstmal nur Java lernen. Ich weiß nicht wie das Buch "Java ist auch eine Insel" ist. Möchte es auch nochmal lesen. Aber das Video2Brain Video für Java7 fand ich ganz in Ordnung. Apps Entwickeln mit Android 4 ist auch gut. Ist für den Einstieg in Android auch ok. Jedoch leider nicht besonders umfangreich für das Geld.Wenn du nicht erstmal Java lernst, wirst du einfach nur ständig Frust haben, weil du bei irgendwelchen Kleinigkeiten nicht weiterkommst. Wie zum Beispiel ne einfache Liste mit Daten anzeigen.
Ich habe durch diesen Frust schon fasst ganz aufgehört. Jetzt wo ich Java ein bisschen verstanden habe, macht die Entwicklung in Android nun doch wieder mehr Spaß.Meine App Idee könnte ich in Access innerhalb von ein bis zwei Tagen ohne Schwierigkeiten fertig machen... nun bin ich in Android aber schon seit mehreren Monaten dabei. Aber es macht mir immer mehr Spaß, je mehr ich verstehe.
Die SQLite Datenbank mit ContentProvider wird wahrscheinlich auch nochmal richtig rein haun bei dir. Das ist in Access natürlich auch viel einfacher.
ListViews sind auf keinen Fall mit dem Listenobjekt in Access gleichzusetzen.Um Android/Java zu verstehen, musst du dein VBA-Denken ganz beiseite legen. Und möglichst keine oder wenig Parallelen ziehen.
Ich Teile gerne weitere Erfahrungen, wenn du was brauchst. Bin aber auch noch gaaaanz am Anfang mit meinen Android-Verständnissen.
-
Oh man es funktioniert!!
Ich bin so Happy!Danke nochmal
-
Wow bin fasziniert, hab selten so gute Beschreibungen gelesen.
Das war nun klar ausgedrückt, ich danke dir! -
Danke für die Antworten,
@ drumliner:
Danke für die Links, aber das habe ich mir natürlich schon angesehen und durchgelesen. Mir ist auch bewusst, dass die Views immer neu gemacht werden beim scrollen, und genau deshalb wollte ich ja in der bindView() Methode eine Abfrage rein machen. nur die Abfrage will er nicht.@ UweApps:
Wie eben erwähnt war das ja genau mein problem. Ich hab dem Cursor tC eine Abfrage gegeben mit getContentResolver().query(...
Ich hab sie sogar eins zu eins aus meiner anderen Aktivity kopiert, da wo es funktioniert. Aber es funktioniert nicht, weil die Klasse in der ich das mache ist eine Unterklasse von CursorAdapter.. also extends CursorAdapter. Wenn ich statt extends CursorAdapter einfach extends Activity eingeben, dann geht es... aber das ist ja nicht sinn der Sache. Ich will mir ja einen Adapter bauen, und keine Activity -
Also... bin trotz wenig Zeit schon ein gutes Stück vorwärts gekommen.
Es hapert allerdings immernoch an den CheckBoxen.Wenn ich die Liste Scrolle sind immer wieder andere Boxen ausgewählt. HolderPattern auch schon gemacht. Irgendwas fehlt wohl noch.
Also beim klicken auf einen Eintrag in der ListView wir die Checkbox auf Checked gesetzt und dann die ID des Kontakts in eine Temporäre Tabelle (SQLite) geschrieben.
Ich hab versucht in der BindView methode eine Abfrage zu machen, und wenn die ID bereits in meiner Temp. Tabelle ist, dann soll die Checkbox wieder als checked angezeigt werden, ansonsten unchecked. Aber ich kann in der "extends CursorAdapter" Klasse keine getContentResolver() Methode aufrufen. und somit klappt das leider nicht.brauche wieder nen Rat
ConstactList.class
Code
Alles anzeigenpublic class ContactsList extends ListActivity { Cursor cursor; ContentResolver resolver; GetContactsAdapter adapter; @Override protected void onListItemClick(ListView l, View v, int position, long id) { .... hier wird die Kontakt ID in meine Temp Tabelle eingetragen (bei checked), bzw. gelöscht (bei unchecked) } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView list = new ListView(this); list.setId(android.R.id.list); resolver = getContentResolver(); // Kontaktdaten holen cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, }, ContactsContract.Contacts.IN_VISIBLE_GROUP + " = ?", // Kriterie new String[] { "1" }, // Wert für Kriterie ContactsContract.Contacts.DISPLAY_NAME // Sortierung ); // Adapter erstellen adapter = new GetContactsAdapter(this, cursor); // Daten in Liste Darstellen list.setAdapter(adapter); // Liste in Activity anzeigen setContentView(list); }
GetContactsAdapter.class
Code
Alles anzeigenpublic class GetContactsAdapter extends CursorAdapter { static class ViewHolder { CheckBox cBox; ImageView icon; TextView text1, text2; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { // Layoutdatei entfalten convertView = inflator.inflate(R.layout.cbox_icon_text_text, parent, false); // neuen Holder erzeugen holder = new ViewHolder(); holder.cBox = (CheckBox) convertView.findViewById(R.id.checkBox); holder.icon = (ImageView) convertView.findViewById(R.id.icon); holder.text1= (TextView) convertView.findViewById(R.id.text1); holder.text2= (TextView) convertView.findViewById(R.id.text2); convertView.setTag(holder); } else { // wenn Holder bereits vorhanden holder = (ViewHolder) convertView.getTag(); } return super.getView(position, convertView, parent); } private LayoutInflater inflator; @SuppressWarnings("deprecation") public GetContactsAdapter(Context context, Cursor c) { super(context, c); inflator = LayoutInflater.from(context); } @Override public void bindView(View view, Context context, Cursor c) { TextView text1 = (TextView) view.findViewById(R.id.text1); // CheckBox cBox = (CheckBox) view.findViewById(R.id.checkBox); // final String id; // id = c.getString(0); // erste Spalte aus dem Cursor (Contact_ID) text1.setText(c.getString(1)); // zweite Spalte im Cursor (DISPLAY_NAME) Cursor tC //hab die Abfrage wieder raus genommen, weils GetContentResolver() nicht funktioniert hier. Also nicht erlaubt ist // if (tC.getCount() == 0) { // cBox.setChecked(false); // } else { // cBox.setChecked(true); // } }
Es sollen einfach alle CheckBoxes als checked markiert sein, bei denen die Kontakt ID bereits in meiner Temp Tabelle vorhanden ist.
Ich saß heute den ganzen Arbeitstag dran und habs nach etlichem hin und her leider noch nicht hinbekommen. Hoffe nun auf einen kleinen Hilfreichen hinweiß... wäre sehr dankbar -
In beiden Antworten wird "Holder Pattern" gesagt.... dann werde ich mir das mal anschaun!
Danke euch!
-
Danke für die Antworten.
Lucas und ChampS:
Das ist mir bewusst und darüber habe ich mir schon Gedanken gemacht. Im Endeffekt werde ich das auch genauso machen.
War nur schlecht ausgedrückt von mir. Aber schön zu sehen, dass man sich hier wirklich Gedanken macht über meine FragenKogoro:
vielen Dank für die Links. Ich glaub das war genau das was ich gebraucht habe. Meine einzige Sorge dabei ist: in diesen(und vielen anderen) Tutorials werden Funktionen von Android benutzt, die laut Android schon veraltet und als "nicht mehr zu benutzen" markiert sind.... funktioniert ja trotzdem alles. Frage mich aber ob das gut ist eine neue App mit alten Funktionen zu schreiben.(?) -
Leute, Ich brauch einen Rat.
Bin neu in Android. Und hab mir trotzdem ein Einstiegsprojekt ausgesucht, das es scheinbar ganz schön in sich hat. In Access(VBA) wäre mir das total einfach. Hier stoße ich an jeder Ecke an Probleme. Vor allem Verständnisprobleme der Android Entwicklung.
das Video2Brain "Apps entwickeln mit Android 4" ist leider total flach gehalten. Es zeigt nur einige kleine Grundlagen.
Die Google I/O Videos in Youtube helfen leider auch nicht weiter, geben nur einige Denkanstöße.Hat jemand eine Idee, wie/wo ich so richtig vernünftig Android entwickeln lernen kann?
Meine App(Idee) enthält:
1. SQLite Datenbank (funktioniert schon, mit ContentProvider. Ich kann Daten eintragen, löschen und Abfragen. Alles super)
2. Kontakte vom Handy:
2.1 Abfragen (ID, Name, Nummer, Bild | und auch eingeteilt in Gruppen)
2.2 Ausgewählte Kontakte in die eigene SQLite Datenbank kopieren (direkt bei Auswahl)3. Listen (Da gibt es nicht nur ListViews(?))
- Zum einen die Liste mit den Kontakten(wie in 2.2 beschrieben): Bild, Name und Checkbox
- Eine ListView mit den Kontakten aus der eigenen SQLite DB. Jeder Eintrag hat ein Textfeld(Name) und 4 Buttons4. SMS Senden, Empfangen
5. Kontakte anrufen
Punkte 1, 4 und 5 sollten keine Probleme mehr machen. Es hapert bei mir stark an den Kontakten und vor allem ListViews in Verbindung mit der SQLite Datenbank und den Kontakten des Handys
-
vielen Dank für die schnelle Antwort,
und danke für den Link. Ich werd das mal so ausprobieren, denn ich habe gerade ein weiteres Problem entdeckt.... die Checkboxes in meiner ListView funktionieren sehr seltsam. Wenn ich einige auswähle, dann die Liste scrolle, dann sind plötzlich ganz andere einträge ausgewählt.... schätze ich muss mir da einen eigenen Adapter bauen und die getView methode verändern (...?)