Beiträge von Agenor

    Hallo,


    die Frage gehört nur indirekt zur Entwicklung (wozu entwickelt man eine App wenn Sie nicht in den Store soll... :) aber hier gibt es bestimmt jemanden der sich damit Auskennt:


    Im PlayStore (Webseite) gibt es in jeder Kategorie die beiden Charts "Bestseller" und "Top Apps". In der Bestseller Liste sind nur die Kostenpflichten Apps und in den Top Apps nur die kostenlosen.


    Ich denke die Bestseller sind klar, also nach Umsatz gestaffelt (oder doch nach Downloads?). Aber wie sind die Apps in der "Top Apps" Liste sortiert? Nach Umsatz kann es hier nicht gehen, denn neben es gibt hier "echt kostenlose" Apps und auch solche mit IAPs. Geht es nach Downloads? Warum stehen dann Apps mit einigen tausend Downloads vor solchen mit einigen Millionen? Geht es um die Downloads am letzten Tag? In der letzten Woche? Was genau wird hier abgebildet?

    OK, die Frage hat sich schon beantwortet. Nachdem ich im Merchant Center für die EU 19% USt eingestellt habe, befindet sich in der Console bei den Einstellungen des IAPs hinter den EU Ländern der Hinweis "1,49 EUR inkl 19% Steuern". Hat also scheinbar nur etwas gedauert, bis die Console die Einstellungen übernommen hat und anzeigt.

    Hallo,


    die Frage hat weniger mit der Android Entwicklung als mehr mit dem Verkauf im Play Store zu tun, aber ich denke das ist dennoch das passende Unterforum.


    Ich die Veröffentlichung meiner ersten Android App steht kurz bevor und ich beschäftige mich gerade mit der Einrichtung der App in der Developer Console. Die App ist gratis, hat aber einen In-App Kauf Artikel der 1,49 EUR kosten soll (Endpreis für den Kunden).


    Ich habe bei der Einrichtung des Artikels nun also den Preis von 1,49 EUR angeben, den Preis automatisch in die ganzen anderen Währungen umrechnen lassen und die Beträge dann manuell angepasst. Wenn also z.B. in irgendeiner Währung 5,86 herausgekomm ist, habe ich daraus z.B. 5,95 gemacht.


    Das ist die ein Seite der Medaille. Nun müssen ja im Google Wallet Merchant Center noch die Mehrwertsteuersätze eingetragen werden. Nach einigem Suchen habe ich herausgefunden, dass aktuell hierbei wohl folgende Regel gilt: Für die EU wird einheitlich der USt Satz des Heimatlandes angegeben (für mich also DE = 19%) und alle anderen Eingaben bleiben bei 0%.


    Frage 1: Warum interessiert Google die Mehrwertsteuer überhaupt?
    Anders als z.B. Apple (dort behält der Store direkt alle Steuern ein und der Entwickler muss sich um (fast) nichts mehr kümmern) hat Google mit den Steuern ja nichts am Hut. Der Entwickler muss sich um die korrekt Versteuerung selber kümmern. Google ist es also eigentlich egal welcher Mehrwertsteuersatz angegeben ist, oder? Der Entwickler bekommt von Google Betrag X überwiesen und der hat sich dann selbst um die Richtige Versteuerung mit dem richtigen Mehrwertsteuersatz zu kümmern, oder?


    So wie ich das verstehe ist die Angabe des Mehrwertsteuersatzes nur für den Entwickler wichtig, weil Google seine 30% vom Netto Betrag berechnet. Wird also ein Satz von 0% angegeben fällt der Anteil den Google abzieht entsprechend höher aus. Die Angabe des korrekten Satzes ist also für Entwickler wichtig, damit der Anteil von Google korrekt berechnet wird. Richtig?



    Frage 2: Sind die Preise die ich in der Console einstelle Brutto- oder Nettopreise?
    Google führt eine Liste mit Ländern, bei denen die Preisangaben im Store genau mit dem Preis übereinstimmen müssen die der Nutzer dann auch tatsächlich zahlen muss. Ist eine App mit 1,49 ausgezeichnet muss der Kunden also auch genau 1,49 zahlen und nicht etwa 1,49 + X Steuern. In Ländern wie z.B. den USA ist es hingegen üblich, dass die Steuern erst an der Kasse aufgeschlagen werden. Dort sehen die Nutzer also Preis X und müssen dann X + Steuern zahlen.


    Sind die Preise in der Console nun aber Brutto- oder Nettopreise? Oder je nach Land mal brutto und mal netto?


    Im Deutschen App Store soll der Kunde den Preis 1,49 EUR sehen und auch zahlen. Muss ich in der Console dann also 1,49 (brutto) einstellen oder doch 1,25 EUR (1,25 netto + 19% = 1,49 brutto)?


    Wie verhält es sich z.B. bei den USA, bei denen die Steuern erst an der Kasse aufgeschlagen werden? Wenn ich hier 1,49 USD einstelle, zahlt der Nutzer dann 1,49 USD oder doch 1,49 + X Steuern?



    Vielen Dank für eure Hilfe!


    PS: Das ab 01.01.2015 für die EU alles anders wird und Google die Steuern dann automatisch abführt ist mir bekannt. Aber aktuell ist das ja noch nicht so.

    Hallo,


    ich möchte in meiner Android 4+ App einige Daten durch ein Balken- und/oder Kuchendiagramm darstellen. Die Suche nach einer passenden Bibliothek gestaltet sich schwieriger als erwartet.


    Die meisten Stellen verweisen auf AChartEngine. Das Projekt sieht allerdings nicht wirklich gepflegt und aktuell aus. Die letzte Aktualisierung ist fast 1,5 Jahre her. Die zugehörige Google Code Seite scheint komplett vergessen zu sein.


    Nicht besser sieht es mit AndroidPlot oder ChartDroid aus. Alles nur Projekte die nicht mehr aktuell sind. Das einzige was wirklich gut aussieht sind die Google Chart Tools. Die UI ist ansprechend und die Funktionen wirklich toll. Die Bibliothek kommt für meine App allerdings nicht in frage, weil die Chart Erstellung nur online läuft, meine App aber zwingend auch offline verwendet können werden muss.


    Ich suche also nach einem Chart-Projekt, dass ähnliche Qualität und Aktualität bietet wie die Goole Chart Tools, aber auch offline läuft. Gibt es so etwas?


    Unter iOS Verwende ich Core-Plot, dass ebenfalls von Google stammt. Es wundert mich, dass Google keine ähnliche Alternative für Android bietet.


    Vielen Dank für eure Tipps!

    Hallo,


    ich würde gerne eine erste Beta-Version meiner App an Tester verteilen. In den Beschreibungen der Beta-Test Version von Google Play hört sich auch alles ganz einfach an, aber ich komme dort einfach nicht weiter. So bin ich vorgegangen:

    • In der Developer Console ist die App angelegt. Bislang war noch kein APK hochgeladen
    • Unter "Alle Apps/MeineApp/APK/BETATEST habe ich die APK für den Test hochgeladen
    • Nach einem Klick auf "Liste von Testern verwalten" erscheint ein PopUp. Dort habe ich die URL der Google Gruppe eingetragen die ich für den Test erstellt habe. Die Gruppe ist voll funktionsfähig und dort sind auch schon einige Tester angemeldet.
    • Nach dem Hinzufügen der URL wird die Gruppe im PopUp angezeigt. Weiter heißt es im PopUp "Nachdem Sie eine Gruppe hinzugefügt haben, senden Sie Ihren Testern den folgenden Aktivierungslink". Das Problem: Dort gibt es keinen Aktivierungslink!
    • Auch nach dem Schließen des PopUps findet sich kein Link. In der Beschreibung bei Google heißt es auch nur, dass man den Link zur Einladung der Tester verwenden soll. Aber welchen Link???
    • Schließe man das PopUp gibt es auch keinen neuen Link.

    In verschiedenen Quellen habe ich gelesen, dass man die App erst als
    Beta-Version veröffentlichen muss bevor der Link angezeigt wird. Aber
    wie soll das gehen? Auf der BETATEST Seite gibt es nur die Option die
    Beta-Version "In den Produktionsstatus hochzustufen", aber das will ich
    natürlich nicht. Die App muss ja erst einmal getestet werden... In der
    Erweiterten Ansicht kann man die App auch in den Alpha-Status
    zurückstufen, aber das bringt mich auch nicht weiter...
    Andere Quellen sagen, dass es ein paar Stunden dauert bis der Link sichtbar wir. Ich habe das Ganze allerdings schon gestern morgen versucht und bislang gibt es immer noch keinen Link.


    Was mache ich falsch und wo bekomme ich den Link her?
    Vielen Dank!


    [Blockierte Grafik: http://img4web.com/i/V4167E.png]


    [Blockierte Grafik: http://img4web.com/i/95NQ32.png]

    Nachdem ich nun mehrere Tage mit der Optimierung verbracht habe und das Problem dennoch nicht komplett beheben konnte, habe ich eine Lösung gefunden:


    Startet man die App auf dem Gerät direkt und nicht über den Debugger läuft alles butterweich und flüssig... Super... Es hat also scheinbar nichts mit dem Code sondern nur mit Overhead durch das Debugging zu tun. Ärgerlich so viel Zeit umsonst investiert zu haben. Aber immerhin habe ich etwas dazu gelernt und der Code ist jetzt auch super optimiert :P

    Nein, dass kann es nicht sein. Der Name "showActivity()" ist an dieser Stelle ggf. auch etwas missverständlich. Es geht dabei NICHT darum eine Activity anzuzeigen, sondern den ProgressBar ein- und den Inhalt auzublenden:


    Code
    private void showActivity() {
    	activityProgressBar.setVisibility(View.VISIBLE);
    
    
    	contentRoot.setVisibilty(View.GONE);
    }


    Mehr passiert dort nicht.


    Ich habe das ganze mal gemessen: Wenn ich als Content nur eine ListView verwende (andere UI Elemente sind also nicht vorhanden) dauert der Seitenwechsel bereits 850ms. Das ist keine Ewigkeit aber dennoch eine spürbare Verzögerung. Dabei wird die ListView und der zugehörige Adapter im Hintergrund erstellt. Erst wenn dies gelaufen ist, wird die ListView in showData() zur UI hinzugefügt. Mehr passiert nicht. Die ListView ist dabei auch nicht übermäßig komplex. Die ListItems bestehen jeweils nur aus zwei TextViews wovon eine zusätzlich ein Drawable enthält.

    Hallo,


    ich arbeite gerade an einer App deren MainActivity über ActionBar-Tabs insgesamt 5 Seiten/Fragments verwaltet. Das Ganze arbeitet ähnlich wie die "Apps" Activity/Seite in der Play-Store App von Google. Dort gibt es auch eine Reihe von Tabs (Kategorien, Startseite, Bestseller, etc.) und man kann über einen Klick auf den zugehörigen Tab oder durch links/rechts Swipes zwischen den Fragments wechseln.


    Wie bekomme ich es hin, dass der Wechsel zwischen den Tabs/Fragments ebenso flüssig und reibungslos läuft wie in der PlayStore App?


    Genau wie bei der PlayStore App haben auch die Tabs/Fragments in meiner App dynamischen Inhalt der erst von einem Server geladen werden muss bevor dieser angezeigt werden kann. Das Problem ist, dass bei meiner App der Wechsel zwischen den Tabs
    extrem hakt. Wechselt man also zu einem neuen Tab dauert 1-2 Sekunden bis dieser wirklich angezeigt wird.


    Dabei wird wird das Laden der Daten natürlich NICHT im UI-Thread ausgeführt sondern ist über einen AsyncTask in den Hintergrund verlagert. Dennoch bekomme ich keinen flüssigen Seitenwechsel hin.


    Die Tabs sind bei mir alle gleich aufgebaut:

    Code
    RelativeLayout
        	ProgressBar 
        	ContentRoot (z.B. eine RelativeLayout)


    Wenn die View geladen wird, ist zunächst nur der ProgressBar sichtbar um zu zeigen, dass etwas passiert. Gleichzeitig wird ein AsyncTask gestartet, dass zwei Dinge übernimmt:

    • Die Daten werden geladen
    • Die zugehörigen UI wird erstellt, also z.B. eine List für alle Kontakte die vom Server geladen wurden, eine ImageView für jedes geladen Bild oder was auch immer. Die Elemente werden natürlich noch NICHT zur UI hinzugefügt denn ein Zugriff darauf ist aus einem Hintergrundthread nicht möglich. Statt dessen werden die Elemente nur erstellt und zu einem gemeinsamen Container Layout (z.B. einem LinearLayout) hinzugefügt

    Sobald der Task fertig ist passiert im UI-Thread nur noch zwei Sachen:

    • Die erzeugte ContainerView wird zum ContentRoot hinzugefügt.
    • Der ProgressBar wird ausgeblendet und der ContentRoot wird eingeblendet

    Der Code hierzu sieht so aus:


    Obwohl alle anderen Aktionen in den Hintergrundthread verlagert wurde und die Aktivität im UI-Thread auf das absolute Minimum reduziert wurde verläuft der Tab-Wechsel nicht flüssig. Warum?


    Dabei kommt es scheinbar nicht darauf an, ob die vorbereiteten UI-Elemente in der ContainerView besonders komplex sind. Auch wenn die ContainerView nur relativ wenige Elemente enthält (z.B. nur ein paar Buttons oder eine ListView mit Kontakten) kommt es bereits zu diesen Hängern.


    Das Problem tritt in zwei verschiedenen Varianten auf, je nach dem ob eine Tab-Seite zum ersten Mal oder wiederholt aufgerufen wird.

    • Beim ersten Besuch: onCreateView wurde ausgeführt und der LoadTask läuft noch. Die Seite wird also angezeigt und der ProgressBar ist sichtbar. Das funktioniert ohne Probleme. Ist der LoadTask aber fertig verläuft der Wechsel vom ProgressBar zum ContentRoot hakelig. Der ProgressBar bleibt für 1-2 Sekunden stehen und erst dann wird der Inhalt angezeigt.
    • Beim wiederholten Besuch: Die View wurde zwischenzeitig durch onDestroyView() freigegeben, der LoadTask ist aber schon komplett. Beim erneuten Besuch der Seite stehen die Daten also direkt in onCreateView() zur Verfügung und der Task muss nicht neu gestartet werden. In diesem Fall dauert einfach der Wechsel zu dieser Seite 1-2 Sekunden.

    Insgesamt ist also keine flüssige Navigation zwischen den Seiten möglich. Warum? Wie könnte ich die Aktivität im UI-Thread noch weiter reduzieren? Ist das überhaupt noch möglich?
    Die PlayStore App arbeitet scheinbar genauso und ermöglicht dabei einen komplett flüssigen Wechsel zwischen den Seiten? Wie löst man das also?
    Vielen Dank!

    Hallo,



    ich habe Icons in den Größen 24x24, 32x32, 48x48, und 64x64 Pixel.
    Das sollte dem Scheme 3:4:6:8 aus der Dokumentation, als ldpi, mdpi,
    hdpi und xhdpi entsprechen.



    Wie genau verteile ich diese Dateien nun auf die verschiedenen
    drawable Ordner? Klar kommen die jeweiligen Dateien in die jeweiligen
    Ordner (drawable-ldpi, drawable-mdpi, etc.), aber welche Version kommt
    in den neutralen "drawable" Ordner?



    • Kommen dort gar keine Dateien hinein, weil die Dateien in allen Auflösungen vorliegen? (Fehlt da nicht noch xxhdpi?)
    • Packt man dort die mdpi Dateien hinein und speichert diese zusätzlich in drawable-mdpi?
    • Pack man dort die mdpi Dateien hinein und verzichtet dafür auf den drawable-mdpi Ordner?
    • Packt man dort die xhdpi Dateien hinein damit diese bei Bedarf
      herunter skaliert werden und speichert diese zusätzlich drawable-xhdpi?
    • Packt man dort die xhdpi Dateien hinein damit diese bei Bedarf herunter skaliert werden und verzichtet dafür auf drawable-xhdpi?


    Welche Lösung ist richtig?

    Hallo,


    ich versuche ein einfaches layer-list drawable zu erstellen. Wenn ich dieses einer ImageView als src zuweise, wird es jedoch nicht gezeichnet:



    Also einfach nur zwei Ovale die leicht versetzt sind. Das macht nicht viel Sinn, aber es geht nur ums Prinzip. Warum wird das nicht dargestellt?


    Das Problem scheinen die android:left|right|bottom|top Anweisungen zu sein. Gibt es nur eine solche Anweisung in der gesamten XML-Datei wird das Drawable ohne Probleme gezeichnet. Gibt es jedoch zwei wie im obigen Beispiel bleibt alles leer.


    Funktioniert:


    Funktioniert nicht (ebenso wie das erste Beispiel):

    Code
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    	<item android:top="20dp" android:left="20dp">
    		<shape android:shape="oval">
    			<solid android:color="@color/dark_gray" />	
    		</shape>
    	</item>   
    </layer-list>


    Was mache ich falsch?

    Hallo,


    bislang habe ich "nur" an verschiedenen iOS und WP Projekten gearbeitet und entwickle nun meine erste Android App. Hierbei konnte ich bislang nicht herausfinden, wie man eigene Controls erstellen kann, bzw. ob dies überhaupt möglich/vorgesehen ist.


    Ich meine z.B. etwas wie den DatePicker. Von anderen Plattformen kenne ich dies als eigenständiges Control, dass sich komplett selbst um seine Anzeige uns seien Daten kümmert.


    Unter WP wäre das z.B. so:
    - Picker ist eigenes Control.
    - Auf irgendeiner Seite/View liegt also ein Picker-Button
    - Klickt der Nutzer den Picker-Button an, geht kein Click-Event an die Seite sondern, die Picker-Button Klasse kümmert sich selbst um die Anzeige des eigentlichen Picker Dialogs.
    - Der Nutzer wählt das Datum aus, der Dialog wird geschlossen und die Seite erfährt z.B. über ein OnDateChanged Event, dass ein neues Datum gewählt wurde.



    Unter Android sehe ich bislang nur folgenden anderen Weg:
    - Um einen DatePicker anzuzeigen platziert man auf einer Seite/Fragement/Activity irgendein klickbares Element.
    - Seite/Fragement/Activity reagiert auf den Klick und erstellt ein neues DialogFragment und zeigt diese an.
    - Das DatePickerFragment benachrichtigt die aufrufende Seite über onDateSet über das gewählte Datum.



    Während das Zurückliefern des Datums in beiden Fällen ähnlich verläuft ist der Anfang, also das Erstellen des Pickers, gänzlich unterschiedlich. Im ersten Fall ist die Funktionalität in einer eigenen Control/Klasse gekapselt die überall wiederverwenden kann. Wie genau der Picker angezeigt wird, ist der Seite die den Picker enthält komplett egal. Diese empfängt am Ende nur das Ergebnis. Ob dazwischen ein Fragment, eine Activity oder irgendetwas anderes angezeigt wurde ist nicht wichtig. Durch die Kapselung kann derselbe Code an beliebig vielen Stellen genutzt werden und muss nur einmal geschrieben werden.


    Im zweiten Fall muss sich jede Seite/Activity die einen DatePicker anzeigen will selber dessen Erstellung und Anzeige kümmern. Der gleiche Code muss immer und immer wieder geschrieben werden.



    Der erste Fall ist also deutlich effizienter. Aber ist das bei Android überhaupt möglich so vorzugehen? Woher sollte eine DatePicker Klasse die notwendigen Informationen haben um ein Fragment oder eine Activity selbständig anzeigen zu können? Geht das also gar nicht?

    Hallo,


    ich möchte eine Activity auf kleinen Geräten FullScreen anzeigen und auf Tablets als Dialog/Popup. Auf der Suche nach einer Lösung bin ich auf Theme.Holo.DialogWhenLarge gestoßen. Weißt man der Aktivity dieses Theme zu, wird es wie gewünscht auf Tablets als Dialog angzeigt.


    Problem hierbei: Ich konnte bislang keine Möglichkeit finden die Größe und Postion dieses Dialogs zu beeinflussen. Die Activity wird einfach zentriert angezeigt und hat ca. dieselbe Größe wie auf einem Telefon. Ich würde diese aber gerne quadratisch gestalten und am oberen Rand positionieren.


    Wird da von der Activity selbst gemacht oder über den Style?


    Ich habe mir Theme.Holo.DialogWhenLarge angesehen und dort wird einfach nur dem preferencePanelStyle der Style
    PreferencePanel.Dialog zugewiesen. Ich verstehe nicht wie das dafür sorgt, dass die Activity als Dialog angezeigt wird. Was hat es mit diesem PreferencePanel auf sich? Wie finde ich generell heraus welche Eigenschaften eine Objekt (View/Activity) überhaupt hat die über einen Style gesetzt werden können?



    Vielen Dank!

    Hallo,


    eine Liste enthält verschiedene Einträge. Klickt man einen Eintrag an, sollen Details in einem Fragment als Overlay angezeigt werden, wie z.B. hier bei Facebook:


    [Blockierte Grafik: http://i.stack.imgur.com/RXUpd.png] [Blockierte Grafik: http://i.stack.imgur.com/ORH71.png]


    Das Ganze ist soweit kein Problem: Natürlich kann ich über die Activity einfach ein RelativeLayout für den abgedunkelten Hintergrund und ein FrameLayout als Container für das Fragment legen. Beide Layouts sind im Normalfall unsichtbar. Nur wenn das Fragment angezeigt werden soll, wird es in den Container gepackt und die beiden Layouts eingeblendet. Fertig.


    In meiner App würde ich solche Overlays aber gerne an ganz unterschiedlichen Stellen einsetzten und hätte daher gerne flexibleren Ansatz. Zum Beispiel eine statische Methode die einfach eine Activitiy und ein Fragment als Parameter erhält und dann alles weitere übernimmt um das Fragment über der Activity anzuzeigen.


    Klingt einfach, ich bekomme es aber nicht hin. Ich scheitere an der programmatischen Erzeugung der Layouts in der Activity. Wie füge ich diese der Activity hinzu?


    Auch wenn ich das schaffe stehe ich immer noch vor einem Problem: Eine statische Methode könnte zwar (vielleicht) die Layouts auf die Activity basteln, aber wie bekomme ich diese dann wieder dort herunter wenn das Overlay ausgeblendet werden soll?


    Hat jemand eine Idee wie man das lösen kann?


    Vielen Dank!

    Hallo,


    eine App soll auf Tablets im Portrait- und Landscape-Mode laufen. Auf kleineren Geräten hingegen (fast) nur im Portrait-Mode. Eigentlich kann man die möglichen Orientierungen ja nur je Activity festlegen. Ich bin auf bei StackOverflow auf eine elegante Lösung gestoßen um das Ganze von der abhängig von der Auflösung zu steuern.


    Das Problem hierbei ist, dass auf kleinen Geräten nur fast ausschließlich im Portrait-Modus gearbeitet wird. Eine Activity zeigt eine Liste von Werten an. Wird diese ins Querformat gedreht soll automatisch die Ansicht wechseln und statt der Liste ein Diagramm angezeigt werden. Wie lässt sich das erreichen, wenn die Activity eigentlich nur aufs Hochformat eingerichtet ist?