Kalendereiträge anzeigen oder vorlesen

MacDoof

MacDoof

Fortgeschrittenes Mitglied
24
Hi zusammen, irgendwie bin ich wohl zu blöd.
Ich weiß es gibt schon Themen zum vorlesen lassen der Termine aber das funtzt net.
Dabei kann das doch nicht so schwer sein.
Alles was ich will ist das Tasker mir meine Termine/Eintragungen aus meinem Googlekalender vorliest wenn ich meinen Wecker beende.
Kann mir da bitte jemand helfen.
Vielen lieben dank schon mal im voraus.
 
Hallo!

Dabei kann das doch nicht so schwer sein.
Naja, mit Tasker-Bordmitteln ist das nicht so einfach, weil man immer nur für einen bestimmten Zeitpunkt Termine abfragen kann.

Ich weiß es gibt schon Themen zum vorlesen lassen der Termine aber das funtzt net.
Was hast du denn getestet (bitte mit link). Vielleicht kann man da ja was verwenden, bevor man alles neu macht.


Wenn dein Handy gerootet ist, kann man direkt auf die Kalender-Datenbank zugreifen. Das wäre am einfachsten umzusetzen.



Grüße, Jürgen.
 
Hallo,

habe mal schnell ein Beispiel gebastelt. Der Task ermittelt alle Termine für die nächsten 24 Stunden und liest dann Titel und Anfangszeit vor:
Code:
CalendarEvents (2)
    <Set Variables.>
    A1: Variable Set [ Name:%loop_time To:%TIMES Do Maths:Off Append:Off ] 
    A2: Variable Set [ Name:%loop_end_time To:%loop_time + 86400 Do Maths:Off Append:Off ] 
    A3: Variable Set [ Name:%loop_interval To:600 Do Maths:Off Append:Off ] 
    <Loop>
    A4: If [ %loop_time < %loop_end_time ]
    A5: Test App [ Type:Calendar Start (Seconds) Data:%loop_time Store Result In:%start ] 
    A6: Test App [ Type:Calendar Title Data:%loop_time Store Result In:%title ] 
    A7: Test App [ Type:Calendar All Day Data:%loop_time Store Result In:%all_day ] 
    <Found events?>
    A8: If [ %title(#) > 0 ]
    A9: For [ Variable:%index Items:1:%title(#) ] 
    <Check "All day" and convert time.>
    A10: Perform Task [ Name:ConvertEventTime Priority:%priority Parameter 1 (%par1):%start(%index) Parameter 2 (%par2):%all_day(%index) Return Value Variable:%event_time Stop:Off ] 
    <Add to list.>
    A11: Array Push [ Name:%events Position:99999 Value:%title(%index) %event_time Fill Spaces:Off ] 
    <Remove duplicates.>
    A12: Array Process [ Variable:%events Type:Remove Duplicates ] 
    A13: End For 
    A14: End If 
    A15: Variable Add [ Name:%loop_time Value:%loop_interval Wrap Around:0 ] 
    A16: Goto [ Type:Action Label Number:1 Label:Loop ] 
    A17: End If 
    <Read out events>
    A18: For [ Variable:%event Items:%events() ] 
    A19: Say [ Text:%event Engine:Voice:com.svox.pico:deu-DEU Stream:3 Pitch:5 Speed:5 Respect Audio Focus:On Network:Off Continue Task Immediately:Off ] 
    A20: Wait [ MS:0 Seconds:1 Minutes:0 Hours:0 Days:0 ] 
    A21: End For


Der Subtask prüft auf Ganztagstermine und wandelt die Uhrzeit um:
Code:
ConvertEventTime (3)
    A1: If [ %par2 ~ yes ]
    A2: Variable Set [ Name:%event_time To:ganztags Do Maths:Off Append:Off ] 
    A3: Else 
    A4: Variable Convert [ Name:%par1 Function:Seconds to Date Time Store Result In:%temp ] 
    A5: Variable Split [ Name:%temp Splitter: Delete Base:Off ] 
    A6: Variable Set [ Name:%temp To:%temp(2) Do Maths:Off Append:Off ] 
    A7: Variable Split [ Name:%temp Splitter:. Delete Base:On ] 
    A8: Variable Set [ Name:%time(1) To:ein Do Maths:Off Append:Off ] If [ %time(1) = 1 ]
    A9: Variable Search Replace [ Variable:%temp(2) Search:00 Ignore Case:Off Multi-Line:Off One Match Only:Off Store Matches In: Replace Matches:On Replace With:. ] 
    A10: Variable Set [ Name:%event_time To:um %temp(1) Uhr %temp(2) Do Maths:Off Append:Off ] 
    A11: End If 
    A12: Return [ Value:%event_time Stop:On ]


Grüße, Jürgen.

Anhang anzeigen Events.zip
 
  • Danke
Reaktionen: munny und MacDoof
Wow! Also vielen vielen lieben dank, das hätte ich nicht einmal ansatzweise so hin bekommen. Das ist genau so wie ich mir das vorgestellt habe.
Das dass natürlich so komplex wird hätte ich nie angenommen.
Nochmals vielen Dank.
 
Wie zu erwarten, habe ich schon den ersten Fehler gefunden: Es wird nicht zwischen Terminen von "heute" und "morgen" unterschieden.

Ich schaue mal, dass ich das noch ändere...

Grüße, Jürgen.
 
Das verstehe ich nicht, hab es kurz getestet und es lief so wie ich es mit vorgestellt habe. Was hab ich übersehen?
 
Wenn du den Task z.b. um 10 Uhr ausführst und hast am nächsten Tag um acht einen Termin sagt die Dame "Termin xy um acht Uhr". Besser wäre "Termin xy morgen um acht Uhr".

Bei Ganztagsterminen weisst du momentan gar nicht ob der Termin heute oder morgen ist...


Grüße, Jürgen.
 
OK, jetzt hab ich es auch gemerkt, hab es gerade noch einmal getestet und da hat die mir die Termine für morgen vorgelesen. Dieser Fehler scheint aber nur dann auftreten wenn an einem Tag keine Termine sind. Dann wird der nächste Tag genommen.
 
Hallo,

jetzt vergessen wir einfach mal alles bis hierhin. :biggrin:

Hier wurde das ganze mit JavaFunction umgesetzt. Hut ab! :thumbup:

Original-Task zum Download: https://www.dropbox.com/s/t8034hz3rp5xqe8/Query_Calendar.tsk.xml?dl=0

Ich habe den Task etwas angepasst und noch einen weiteren Task zum Vorlesen erstellt (siehe Anhang). Es werden jetzt nur Termine vom aktuellen Tag (00:00 - 23:59 Uhr) ermittelt.

Vorteile:

  • Deutlich schneller: Java mit Tasker benötigt zwar sehr viele Aktionen, hier wird aber nur genau einmal der Kalender abgefragt. Bei meiner Lösung: 432 mal "Test App Calendar"... :confused2:
  • Die Termine sind richtig sortiert.
  • Bei Bedarf stehen auch Endzeit, Ort und Beschreibung zur Verfügung.

Speech Engine: Bei mir ist Pico TTS installiert. Wenn du eine andere Engine verwenden willst, muss das im Task "ReadOutEvents" in dem JavaScriptlet am Anfang geändert werden.

Grüße, Jürgen.

Anhang anzeigen EventsNew.zip
 
  • Danke
Reaktionen: munny
OK, jetzt bin ich komplett raus, davon versteh ich nix. Aber es funktioniert. Nochmal vielen vielen dank.
 
Das ist mit gar nicht aufgefallen, vielleicht weil bei mir fast immer etwas drin steht.
 
So hallo erst mal. Nach mehreren Wochen Einsatz wollte ich eine kurze Rückmeldung geben. Alles funtzt tadellos. Habe noch ne Kleinigkeit hinzugefügt, da meine Medien Lautstärke immer auf 0 ist hab ich noch ein gestellt das die Lautstärke auf max gestellt wird bevor die Dame mir die Termine vorliest.
Vielen vielen Dank Jürgen.
 
Kann man statt der Pico tts auch die von Google einstellen?

Lg

Edit: com.google.android.tts ist die Lösung
 
Zuletzt bearbeitet:
Gibt es hier noch Hilfestellung?
Bekomme 2 Fehlermeldungen, wenn ich den Task in der App teste.
 
@Ti-ejtsch Habe keine Ahnung von dem Thema hier...

Aber Fehlermeldungen haben ja meist einen Sinn, da würde ich die schon nennen.
Nötige Berechtigungen hast du hoffentlich vergeben?
 
Hoffe schon, dass alle Berechtigungen gesetzt sind.

Hier mal der erste Fehler (rot markiert):

18.31.55/E Java Function: cur -> cur

18.31.55/E Java Function use app context

18.31.55/JU analyse: target: cr expected: null

18.31.55/JU target: analyse done: cr: class: android.app.ContextImpl$ApplicationContentResolver obj: android.app.ContextImpl$ApplicationContentResolver@946d509 partWithoutMods: null static: false const false casted: false

18.31.55/JU analyse: returnval: android.database.Cursor expected: null

18.31.55/JU returnval: analyse done: android.database.Cursor: class: android.database.Cursor obj: null partWithoutMods: null static: true const false casted: false

18.31.55/JU initClass: class: android.database.Cursor obj: null partWithoutMods: android.database.Cursor static: true const false casted: false

18.31.55/JU initClass: retnovar: init with array handling -> interface android.database.Cursor

18.31.55/JU initClass: class: android.app.ContextImpl$ApplicationContentResolver obj: android.app.ContextImpl$ApplicationContentResolver@946d509 partWithoutMods: cr static: false const false casted: false

18.31.55/JU initclass: target: use object class: android.app.ContextImpl$ApplicationContentResolver

18.31.55/JU analyse: param0: builtURI expected: class android.net.Uri

18.31.55/JU param0: analyse done: builtURI: class: android.net.Uri$HierarchicalUri obj: content://com.android.calendar/instances/when/1649800855570/1649887195570 partWithoutMods: null static: false const false casted: false

18.31.55/E param 0 class: class android.net.Uri

18.31.55/JU analyse: param1: projection expected: class [Ljava.lang.String;

18.31.55/JU param1: analyse done: projection: class: [Ljava.lang.String; obj: [Ljava.lang.String;@b09c4ef partWithoutMods: null static: false const false casted: false

18.31.55/E param 1 class: class [Ljava.lang.String;

18.31.55/E param 2 class: class java.lang.String

18.31.55/E param 3 class: class [Ljava.lang.String;

18.31.55/JU analyse: param4: begin ASC expected: class java.lang.String

18.31.55/JU param4: analyse done: begin ASC: class: java.lang.String obj: begin ASC partWithoutMods: null static: false const true casted: false

18.31.55/E param 4 class: class java.lang.String

18.31.55/E targetClass: class android.app.ContextImpl$ApplicationContentResolver

18.31.55/E object: android.app.ContextImpl$ApplicationContentResolver@946d509

18.31.55/E method: public final android.database.Cursor android.content.ContentResolver.query(android.net.Uri,java.lang.String[],java.lang.String,java.lang.String[],java.lang.String)

18.31.55/E arg0 class android.net.Uri$HierarchicalUri value content://com.android.calendar/instances/when/1649800855570/1649887195570

18.31.55/E arg1 class [Ljava.lang.String; value [Ljava.lang.String;@b09c4ef

18.31.55/E arg2 class null value null

18.31.55/E arg3 class null value null

18.31.55/E arg4 class java.lang.String value begin ASC

18.31.55/E Java Function: java.lang.reflect.InvocationTargetException

18.31.55/ Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.calendar.CalendarProvider2 from ProcessRecord{629ac02 3640:net.dinglisch.android.taskerm/u0a368} (pid=3640, uid=10368) requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR

18.31.55/ Caused by: android.os.RemoteException: Remote stack trace:

at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:7595)

at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7951)

at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2493)

at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2966)

at android.os.Binder.execTransactInternal(Binder.java:1154)


18.31.55/E result: stop task (error)

18.31.55/E Fehler: 1

18.31.55/E java.lang.reflect.InvocationTargetException

at java.lang.reflect.Method.invoke(Native Method)

at net.dinglisch.android.taskerm.ExecuteService.b(SourceFile:17636)

at net.dinglisch.android.taskerm.ExecuteService.a(SourceFile:3333)

at net.dinglisch.android.taskerm.ExecuteService.a(SourceFile:9537)

at net.dinglisch.android.taskerm.ExecuteService.a(SourceFile:205)

at net.dinglisch.android.taskerm.ExecuteService$1.run(SourceFile:488)

at java.lang.Thread.run(Thread.java:923)

Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.calendar.CalendarProvider2 from ProcessRecord{629ac02 3640:net.dinglisch.android.taskerm/u0a368} (pid=3640, uid=10368) requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR

at android.os.Parcel.createExceptionOrNull(Parcel.java:2376)

at android.os.Parcel.createException(Parcel.java:2360)

at android.os.Parcel.readException(Parcel.java:2343)

at android.os.Parcel.readException(Parcel.java:2285)

at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:5949)

at android.app.ActivityThread.acquireProvider(ActivityThread.java:7015)

at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2954)

at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:2509)

at android.content.ContentResolver.query(ContentResolver.java:1181)

at android.content.ContentResolver.query(ContentResolver.java:1128)

at android.content.ContentResolver.query(ContentResolver.java:1084)

... 7 more

Caused by: android.os.RemoteException: Remote stack trace:

at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:7595)

at com.android.server.am.ActivityManagerService.getContentProvider(ActivityManagerService.java:7951)

at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2493)

at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2966)

at android.os.Binder.execTransactInternal(Binder.java:1154)




18.31.55/MacroEdit action finished exeID 1 action no 18 code 664 status: Err next 18
 
Ti-ejtsch schrieb:
Hoffe schon, dass alle Berechtigungen gesetzt sind.
Wieso schaust du nicht nach?

Die Berechtigung zum Lesen des Kalenders hat Tasker ja laut deiner Fehlermeldungen nicht.

Inwieweit das die anderen Fehlermeldungen berührt, weiß ich allerdings nicht.
 
  • Danke
Reaktionen: Ti-ejtsch
Ein Neustart hat geholfen!
Fehler erscheint keiner mehr. Danke!

Jetzt fehlt nur noch die Sache mit Bluetooth.
Tasker soll die Bluetoothverbindungen überwachen und bei einer bestimmten Verbindung die Tasks nach 5 Minuten ausführen.
 
@Ti-ejtsch Das gibt's ja bei der Profilerstellung unter Status > Netzwerk > Bluetooth verbunden
als Bedingung.

Im Task dann zuerst 5 min warten und dann den obigen Kram ausführen?
 
  • Danke
Reaktionen: Ti-ejtsch

Ähnliche Themen

Viper73
Antworten
8
Aufrufe
329
rtwl
rtwl
holms
Antworten
1
Aufrufe
88
Mathens
Mathens
coolzero3389
Antworten
4
Aufrufe
531
coolzero3389
coolzero3389
Zurück
Oben Unten