Andere App starten als Bestandteil der App

  • Besserer Titel ist mir nicht eingefallen...


    Ich will wissen wie man eine andere App startet aber nicht als Extra Task sondern untern den Namen meiner App.
    z.B. Meine App A startet App B und im TaskManager soll jetzt nicht App A und App B angezeigt werden, sondern App A und App A mit Inhalt von App B.
    Evtl. ist es besser beschrieben: Meine App startet z.B. die Galerie und die Galerie wird im TaskManager unter meinen Appnamen angezeigt.


    Dass das funktioniert weiß ich. Siehe Anhang
    Der UC Browser start Whatsapp, im Task ist aber der Name vom UC Browser.

    Warum ich das brauche?
    In der Hoffnung, dass man letztendlich doch noch ein Inject_Event ohne root zu einer anderen App schicken kann.


    Vermutung: Man muss bestimmt irgendwelche Flags beim Intent welches man aufrufen will oder ruft es mit einer anderen Methode als startActivity() auf.
    Meine Test haben bis jetzt noch keinen Erfolg gehabt.


    Vielen Dank für Rückmeldungen
    Liebe Grüße Ahnungslos

  • Hallo, so ich versuche es mal.
    Wie du sicher weist gibt es zwei arten von Intents.


    Explizite:
    Geben die Komponente an die sie gerichtet sind genau an. zB.. eine Activity.


    Constructor
    Intent(Context packageContext, Class<?> cls)
    Intent(String action, Uri uri, Context packageContext, Class<?> cls)



    Implizite:
    Geben statt einer genauen Zielkomponete nur einen Hinweis Über die gewünschte Funktionalität an . Welche App gestartet wird, wird über den Action und Uri Parameter bestimmt und kann meist über einen Auswähler vom User gewählt werden.


    Constructor
    Intent(String action)
    Intent(String action, Uri uri)


    Die Action Parameter kannst du hier in der Doku nach schauen.
    https://developer.android.com/…droid/content/Intent.html



    Um eine bestimmte App zu starten ist es sinnvoll zu wissen wie der Intentfilter der App aufgebaut ist bzw. worauf er reagiert. Das ist meistens in der Doku der App beschrieben. Wenn nicht musst du testen. Den Intentfilter könntest du dir durch rückübersetzen der Apk im Manifest anschauen.


    So nun Frage was meinst du mit „Inject_Event“ ich kenne das nur bei einen Service ?
    Um welche App Handelt es sich und was willst du Erreichen?


    PS. habe noch etwas gefunden.
    Die "android.permission.INJECT_EVENTS" gehöht seit API 23 zu den Dangerous Permission und es reicht nicht mehr nur sie im Manifest zu setzen sondern sie muss auch zur laufzeit vom User bestätigt werden.
    könnte auch ein möglicher Fehler sein.


    https://stackoverflow.com/ques…vents-permission/25014038
    https://stackoverflow.com/ques…ther-application-requires


    Ich verstehe leider nicht wie du mit Hilfe eines Intent Nachrichten an eine andere Activity, App, Fenster schicken willst. Denke das willst du bestimmt sonst bräuchtest du nicht die Inject_Event Permission.
    Denke du willst der App Vorgaukeln das der User zB. Tastatureingaben gemacht hat.
    Das dies mit einen Intent geht kann ich mir nicht Vorstellen.
    Eher mit "Instrumentation" ist aber nur eine Vermutung von mir die ich noch nie getestet habe.
    https://findusages.com/search/android.app.Instrumentation/Instrumentation$0?offset=14
    https://github.com/xaviiic/Not…widget/RxSeekBarTest.java
    https://developer.android.com/…trumentation-element.html

  • Es ist ein implizites Intent, weil ich nur den Package Pfad der anderen App habe. Mich interessieren halt nur die Parameter die ich brauche, dass die gestartete App als meine vorgetäuscht wird.

    Um eine bestimmte App zu starten ist es sinnvoll zu wissen wie der Intentfilter der App aufgebaut ist bzw. worauf er reagiert. Das ist meistens in der Doku der App beschrieben. Wenn nicht musst du testen. Den Intentfilter könntest du dir durch rückübersetzen der Apk im Manifest anschauen.

    Ich glaub das ist zur Laufzeit ein bisschen doof, wenn ich dafür überhaupt Berechtigungen bekommen kann.


    Zu INJECT_EVENTS:
    Mein Android Studio gibt an, dass INJECT_EVENTS nur vom SystemApps verwendet werden darf.

    Ich verstehe leider nicht wie du mit Hilfe eines Intent Nachrichten an eine andere Activity, App, Fenster schicken willst. Denke das willst du bestimmt sonst bräuchtest du nicht die Inject_Event Permission.

    Also ich möchte mit meiner App ein Peripheriegerät vorgaukeln, dies kann ich mit Instrumentation ermöglichen. Das Problem ist halt wenn man eine Andere App steuern will kommt halt der INJECT_EVENTS-PermissionsFehler.
    Meine Idee war halt Android vorzugaukeln, dass die andere App halt nicht eine andere ist sondern meine und damit zu hoffen, dass der INJECT_EVENTS-PermissionsFehler nicht auslöst.



    Die App soll halt auch ohne root laufen.



    Zur App:


    Die App soll als eine Art Treiber mit Settings laufen, d.h. ich hab ein BLE (Bluetooth Low Energy) Device und dessen Inputs sollen dann als Peripherie umgewandeln, dies funktioniert halt alles einwandfrei bis auf, dass ich halt keine andere App damit steuern kann. Es muss letztendlich halt nur für eine vom benutzerdefinierte App funktionieren.


    Eine Idee war auch gewesen mittels BluetoothDevice eine Tastatur vorzugaukeln, aber dass scheitert wieder am auf private gelegten Kontruktor der Klasse BluetoothDevice.

  • Hallo das hier meinte ich auch nicht zu Laufzeit vielmehr meinte ich das du dir die Fremde apk anschauen kannst und eventuell die Manifest Datei daraus lesen kannst, um zu sehen worauf die App außer den normalen Aktionen reagiert.


    Ich glaub das ist zur Laufzeit ein bisschen doof, wenn ich dafür überhaupt Berechtigungen bekommen kann.“

    Zu den INJECT_EVENTS hast du dir das mit den neuen Permissionen seit API23 angesehen.


    Frage gehe ich richtig in der Annahme das es keine von dir entwickelte App ist an sie du die Nachrichten schiken willst?

  • "Frage gehe ich richtig in der Annahme das es keine von dir entwickelte App ist an sie du die Nachrichten schiken willst?"
    -Richtig, deswegen ist es auch blöd eine fremde App zu decompilieren. Davon mal abgesehen weiß ich auch nicht welche App der Benutzer steuern will.


    "Zu den INJECT_EVENTS hast du dir das mit den neuen Permissionen seit API23 angesehen."
    -Ne, hab ich nicht meine API ist glaube 21. (Bin gerade nicht zuhause).


    Davon mal abgesehen will ich trotzdem einfach nur das erreichen was die App UC Browser schafft/macht.

  • hallo deine API ist bestimmt nicht 21 außer du hast das Projekt vor einigen Jahren angefangen wo API 21 aktuell war. Compilesdk ist die API auf der du entwickelst und das ist bei AS im Moment 27. Außer du hast im graedle was anders eingestellt. Somit musst du die neuen permissionen benutzen.


    Werde mir das ab Mittwoch nochmal anschauen bin übers we nicht zu Hause.

  • Du meinst wahrscheinlich den CompileSDK ?(API26) Ich hab eher an die minSDK(API21) gedacht.


    Ich hab das Projekt am Montag angefangen. Das ist meine erste App aber ich bin kein Java-Neuling. :P Eclipse ist mir als IDE lieber, aber bei AS ist ja alles schon angepasst. Wenn die API im Quellcode wäre, würde ich mich ja selber durchhangeln aber bis auf "throw new RuntimeException("Stub!");" ist ja nicht erkennbar.

  • Ja genau CompileSDK ist die Version auf der es übersetzt wird minsdk ist die version mir der es noch lauffähig ist. Für die premission ist das uninteressnt. Du bist über api 23 somit reicht es nicht mehr nur die permission im Manifest zu setzen. Kann dir leider dafür keine link geben da ich nur an Handy bin. Suche nach premission api 23. Ich benutze meist die Ask Bibliothek von github. https://github.com/00ec454/AskII


    Wenn die API im Quellcode wäre, welche api?

  • Danke für die Hilfe,
    es funktioniert so wie ich es mir gedacht habe, aber es bringt mich leider nicht weiter. Das INJECT_EVENTS-Permission-Fail-DingsBums kommt trotzdem, somit war meine Überlegung Android auszutricksen auch nicht erfolgreich.^^


    P.S. Jetzt muss ich wohl doch zu Plan C greifen.. It's to much work..
    Oder fällt dir noch was ein wie man Methoden wie nextPage() und previousPage() auf FremdApps übertragen/anwenden/umsetzen kann?

  • wie hast du denn die INJECT_EVENTS-Permission gesetzt nur im Manifest wenn ja das ist zu wenig.


    https://developer.android.com/…rmissions/requesting#java
    https://www.google.com/url?sa=…Vaw0SLHrRUfF1zXshLL2nQPCp
    https://developer.android.com/…pics/permissions/overview


    PS kannst es auch mit der ASK lib von Github versuchen

  • Manifest.permission.INJECT_EVENTS

    Existiert nicht in meiner API.


    Ich hab es mit Ask getestet aber ich bekomme da nur AppCombatActivity Fehler (und daraus entstehende ) und ich check einfach net wie man das beheben kann. (Schande über mich) :(


    Hast du es eigentlich mal selber getestet?


    EDIT:
    Ich habs doch hinbekommen, aber ich bekomme keine Anfrage auf Bestätigung der Permission, alle anderen funktionieren wiederum. :S

  • Nein selber mit der von dir gewünschten Preemision habe ich es nicht. Aber die Lib von Ask ja ist bei mir meistens im einsatz ist eine der einfachsten Lib zum Thema premission meine ich.
    Was meinst du mit Bestätigung es kommt eine Anfrage auf Genehmigung wenn die Berechtigung angefordert wird wenn du sie erteilst merkt sich das Android und fragt beim nechsten mal nicht mehr. Das Ablehnung glaube ich merkt sich android auch und fragt auch nicht mehr nach.

  • Was meinst du mit Bestätigung es kommt eine Anfrage auf Genehmigung wenn die Berechtigung angefordert wird wenn du sie erteilst merkt sich das Android und fragt beim nechsten mal nicht mehr. Das Ablehnung glaube ich merkt sich android auch und fragt auch nicht mehr nach

    Die Anfrage meinte ich ja damit. Nur die Anfrage kommt bei bei INJECT_EVENTS nicht

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!