Prüfen, ob App auf Gerät installiert ist Problem S10

wer112

Top Contributor
So liebe Community,

Für mein App Store, wenn man auf eine App draufklickt wird geprüft, ob diese App auf dem Handy installiert wurden ist oder nicht.
Wenn die App installiert wurden ist, ist der Installationsbutton unsichtbar und dafür kommen die Deinstallationsbutton und Öffnen Button,
damit man die Öffnen oder deinstallieren kann. Dank eure Hilfe und soweiter hat es auf allen meinen Geräten super funktioniert.

Getestet in der Flag Reihe S von Samsung((S2)S7,S8,S9+), da hat der Store bezüglich des Package Manager ect. sehr gut geklappt. Ich habe die App einen Kumpel gegeben, der besitzt ein S10 und da hat es überhaupt nicht funktioniert. Seine Frau hat ein S20 Ultra und dort geht es problemlos.

Wenn Google eine Funktion einstellt, dann alle Nachfolger. Angenommen die haben das für S10 eingestellt, dann würde es ja auch bei einem S20 net gehen und nicht S10 geht nicht und bei S20 geht das, so ein Hin und Her macht Google net.

Wisst ihr, wiso es bis 9+ geht und dann erst ab S20 wieder?
Warum geht es nicht bei S10? Habt ihr da eine Erklärung?

Habe da extra mein S9+ verkauft, um ein S10 zu kaufen und ich sah das Problem selber.
Ich habe ein D Log gemacht und dieser sagt, dass die App nicht installiert ist, obwohl die installiert war.
Habe es im Catch getan. Auf allen anderen Handys bei mir geht der Code, nur net auf S10.

So ist der Code im Fragment:

Java:
 private boolean AppDrauf() {

        PackageManager  pm = getActivity().getPackageManager();
        try {
            PackageInfo info = pm.getPackageInfo("--Packagename(z.B.:com.123.dd)---", PackageManager.GET_META_DATA);

            install_btn.setVisibility(View.INVISIBLE);

            deinstall_btn.setVisibility(View.VISIBLE);
            oeffnen_btn.setVisibility(View.VISIBLE);

            wurdeschonmalinstalliert = 1;
            SharedPreferences prefs = getActivity().getSharedPreferences(packageName, getActivity().MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putInt("wurdeschonmalinstalliert" , wurdeschonmalinstalliert);
            editor.apply();

            DeleteApk();

            Log.d("IstInstall", "Ist installiert");

            deinstall_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    Intent i = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
                    i.setData(Uri.parse("package:" + packageName));
                    i.putExtra(Intent.EXTRA_RETURN_RESULT, true);
                    startActivityForResult(i, UNINSTALL_REQUEST_CODE);




                }
            });






            oeffnen_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    Intent i = getActivity().getPackageManager().getLaunchIntentForPackage(packageName);
                    startActivity(i);



                }
            });


        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();

            Log.d("IstInstall", "Nicht Installiert!!!");

            install_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (checkPermission()){
                        UpdateApp atualizaApp = new UpdateApp();
                        atualizaApp.setContext(getActivity());
                        atualizaApp.execute(apk_url);

                    }else{
                        requestPermission();
                    }
                }
            });
            return false;
        }

        return true;


    }

Wie kann ich diesen Code auch für S10 zul laufen bekommen und wiso geht der bei einem S20?
Und Wie kann man es bei anderen Android geräten(auch die neueren) zum laufen bringen?

Ich verstehe nicht, wiso es in der Flag Reihe alle gehen, nur die 10 nicht, aber die 20 geht wieder...

Ich danke euch mal im Vorraus!
 

wer112

Top Contributor
Was ist denn der Fehler der geworfen wird?
Es wird der D Log im Catch aufgerufen, das die App nicht Installiert sei, obwohl die installiert ist.

Der Error Log beim Öffnen der App:

Code:
2022-05-17 14:09:41.203 1011-1061/? E/Watchdog: !@Sync: 493 heap: 68 / 75 [2022-05-17 14:09:41.203] sdogWay: softdog FD: 785

dies kommt immer, bei aufruf der App Fragment, die ich installiert habe.

Beim D LOG:
Code:
2022-05-17 14:14:18.447 22032-22032/store W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
2022-05-17 14:14:18.447 22032-22032/store W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
2022-05-17 14:14:18.447 22032-22032/store D/IstInstall: Nicht Installiert!!!
2022-05-17 14:14:18.450 1011-1030/? I/AppsFilter: interaction: PackageSetting{1e0efbb store/10271} -> PackageSetting{fd5858e com.app/10274} BLOCKED
2022-05-17 14:14:18.450 22032-22032/store W/System.err: android.content.pm.PackageManager$NameNotFoundException: com.andrealfredklug.countdownwlanapp
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:278)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:250)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at store.App_Fragment.IsAppInstall(App_Fragment.java:256)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at store.App_Fragment.onResume(App_Fragment.java:649)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.Fragment.performResume(Fragment.java:2551)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1346)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1581)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1642)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2220)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2166)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2067)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:742)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.os.Handler.handleCallback(Handler.java:938)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.os.Looper.loop(Looper.java:246)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:8633)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
2022-05-17 14:14:18.450 22032-22032/store W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
2022-05-17 14:14:18.450 22032-22032/store D/IstInstall: Nicht Installiert!!!
2022-05-17 14:14:18.472 22032-22032/store D/ScrollView:  onsize change changed
2022-05-17 14:14:18.472 22032-22032/store D/ScrollView:  onsize change changed
2022-05-17 14:14:19.774 573-22521/? I/HYPER-HAL: [RequestManager.cpp]releaseLocked(): Released ID : 4406014

Er überspring try und kommt direkt ins catch, wo das D Log Nicht Installiert steht...

Das Grüne ist diese Zeile:

Java:
 PackageInfo info = pm.getPackageInfo("..PackageName(com...)...", PackageManager.GET_META_DATA);
 

Jw456

Top Contributor
Bei dem S20 wird es schon Android 12 sein.

Bei Android 12 ist Google wider etwas zurück bei denn Datei-Rechten gegangen. Du musst ja auch einen FILE_PROVIDER haben mit dem du dem Intent besser der App die hinter dem Intent hängt zugriff auf die Datei gibst. Und diese rechte System hat sich in Lester Zeit von Android Version zu nächsten ständig verändert.

schaue mal nach Scoped Storage bei den einzelnen Versionen

Frage ist die App Installiert worden durch dein Programm?
Wenn Ja kannst du sie vom Handy Launcher Starten?
Oder wurde sie gar nicht installiert über deine App? i
 
Zuletzt bearbeitet:

wer112

Top Contributor
Welche Android Versionen sind installiert? Ab Android 11 braucht man neue Rechte um die Paketliste abzufragen.
Das hat mit weitergeholfen. Danke!
Ich musste nur im Manifest die Query_ALL_Package hinzufügen.
Aber bei der Dokumentation verstehe ich nicht, da es gesagt wird, dass es Apps herraus fildert und es ausnahme gibt, wo es auch ohne Query angezeigt bekommt. Z.B.: wenn eine App eine andere App installiert. Aber bei mir klappt das net.

Aber mit dem Query geht es nun als Permission.

THANK YOU!
 

wer112

Top Contributor
Bei dem S20 wird es schon Android 12 sein.

Bei Android 12 ist Google wider etwas zurück bei denn Datei-Rechten gegangen. Du musst ja auch einen FILE_PROVIDER
Was ist so ein File_Provider?
schaue mal nach Scoped Storage bei den einzelnen Versionen
Wo steht das bzw. Da wird die Package sichtbarkeit aufgeführt oder was tut das?
Frage ist die App Installiert worden durch dein Programm?
Ja der App Store hat die App erfolgreich installiert. Aber nicht die selbst installierte App erkannt, obwohl in der Doku steht, dass es als Ausnahme ist und dafür keine extra Berechtigung braucht, da der App Store die App ja selber installiert hat.
Wenn Ja kannst du sie vom Handy Launcher Starten?
Meinst du außerhalb zu starten, dort wo alle anderen Apps sich befindet? Wenn ja ich konnte, z.B.: auf die Home Taste drücken und dann kann ich die vom App Store installierte App normal öffnen.

Oder wurde sie gar nicht installiert über deine App? i
Doch, das hat der App Store mit deiner Installationanleitung funktioniert. Es llag daran, dass er die selbstinstallierte App nicht erkannt hat
und somit war der Deinstallationsbutton und der Öffnenbutten weggeblieben. Wenn man ausf Die App im App Store war. War nur der Installationsbutten, die anderen 2 waren weg.

In der Doku wurde gesagt, das man die Packagename im Mainifest hinterlegen soll.
Apper wenn der App Store eine App installiert, dann zählt es als Ausnahme und er braucht keine extra Berechtigung.

Durch die <use-premission ... QUERY_ALL_PACKAGE hat das jetzt alles super geklappt.
Frage mich trotzdem, wisso die Ausnahme net klappte...
 

Jw456

Top Contributor
Ja der App Store hat die App erfolgreich installiert. Aber nicht die selbst installierte App erkannt, obwohl in der Doku steht, dass es als Ausnahme ist und dafür keine extra Berechtigung braucht, da der App Store die App ja selber installiert hat.
Also wurde deine App zwar von deinem Server (dein App Strore) runter geladen aber nicht auf dem Handy installiert. Sonnst könntest du es ja einfach wie jede anders App vom Homescreen oder Appdrawer statten und das Icon wäre auch da.



Du lädst ja die APK von deinem Server in einen Ordner auf dein Handy. Jetzt machst du ja einen Intent der die APK installiert auf dem Handy. Hinter dem Intent steckt auch eine App die Zugriff auf die APK Datei braucht. Das Kannst du nur mit einem File_Provider erreichen, und da wird das Problem sein. In welchen Ordner lädst du denn die APK?

Wie ich schon sagte ist das Scoped Storage unter Android 11 sehr streng und wurde unter 12 wider etwas aufgeweicht.
 

wer112

Top Contributor
Also wurde deine App zwar von deinem Server (dein App Strore) runter geladen aber nicht auf dem Handy installiert. Sonnst könntest du es ja einfach wie jede anders App vom Homescreen oder Appdrawer statten und das Icon wäre auch da.
Doch es wurde installiert, es kamm das Installationsfenster und erfolgreich installiert. stand da Öffnen und fertig. Und die installierte App war auf dem Handy da...
Du lädst ja die APK von deinem Server in einen Ordner auf dein Handy. Jetzt machst du ja einen Intent der die APK installiert auf dem Handy. Hinter dem Intent steckt auch eine App die Zugriff auf die APK Datei braucht. Das Kannst du nur mit einem File_Provider erreichen, und da wird das Problem sein. In welchen Ordner lädst du denn die APK?
Vielleicht, lag es daran, dass nach der Installation, die runtergeladene apk gelöscht wird. Aber dann hätte es ja nicht mehr erkannt, auch wenn ich es mit query permision machte. Aber da hats erkannt...

Ich notiere das mal und recherchiere darüber...
Wie ich schon sagte ist das Scoped Storage unter Android 11 sehr streng und wurde unter 12 wider etwas aufgeweicht.
Ich hoffe nicht, das es noch strenger wird....
 

Jw456

Top Contributor
Die App die hinter dem Intent steckt hat keine Rückmeldung. Ein Start mit Start mit Start Activity For Result geht also nicht. Das hatte ich dir in einem anderen Thread schon mal gesagt.
Du weißt also nicht wenn der Installer fertig ist.
Da du keine vernünftige Rückmeldung bekommst.

Das was du in der result Methode bekommst ist nicht das was du haben willst. Wirst du auch nicht bekommen. Mit dem intent.
 

wer112

Top Contributor
Die App die hinter dem Intent steckt hat keine Rückmeldung. Ein Start mit Start mit Start Activity For Result geht also nicht. Das hatte ich dir in einem anderen Thread schon mal gesagt.
Du weißt also nicht wenn der Installer fertig ist.
Da du keine vernünftige Rückmeldung bekommst.

Das was du in der result Methode bekommst ist nicht das was du haben willst. Wirst du auch nicht bekommen. Mit dem intent.
Sorry, ich weiß Überhaupt nicht was du mit der Aussage meinst. Aber der Installer hat Fertig. Wenn man auf Fertig drückt, dann löst es ja onResume aus, wobei die erneute Prüfung stattfindet.

Ich verstehe nicht, wiso die App nicht erkannt hat... Ist auch bestimmt nicht wichtig, da das Problem aktuell gelöst ist.

Ich musste nur in manifest die Premmission QUERY_ALL_PACKAGE hinzufügen.
Und danach hat ALLES einwandfrei verstanden.

Dir danke ich dir in diesem Thread, da du mir erklärt hattest, wiso es auf ein S10 nicht gegangen hatte und warum es auf ein S20 klappt.
Ich habe es verstanden, dass auf Android 11 mer berechtigung haben wollte und auf 12 hat Google wieder rückgängig gemacht...
 

Ähnliche Java Themen

Neue Themen


Oben