Als PDF speichern "Fehler beim Ändern der Einstellung"

E

enrem

Erfahrenes Mitglied
29
Hallo,

über eine WebView realisiere ich meine Druckaufgaben. Dabei übergebe ich der WebView einen HTML-String. So wie hier Womit erstellt Ihr eure Berichte (PDF-Dateien erzeugen)

Keine Ahnung womit das zusammen hängt aber nach der Umstellung auf SDK 30 klagen Benutzer darüber, das Sie keine PDF mehr erstellen können. Es folgt die Meldung "Fehler beim Ändern der Einstellung".

Woran könnte das liegen?

Im Emulator funktioniert alles Einwandfrei. Was mir auffält ist, dass bei den Benutzern das Eingabefeld für den Dateinamen fehlt. Bei den Problemfällen wird also gleich irgendwo die PDF geschrieben. Vor dem Update konnten diese den Namen noch eingeben. Hatten also diesen Dialog zum speichern.

Wenn ich nun alte Versionen also unangetastete APK´s verwende, kommt trotzden noch der selbe Fehler. Ich vermute das Irgendwo etwas von Android für diesen Dialog gespeichert wird.

Ich bin total verwirrt und auch verzweifelt denn nach der Übergabe der HTML an das WebView habe ich ja keinen Einfluß mehr auf den Dialog der da folgt. Sie Bilder.
 

Anhänge

  • Vorschau1.jpg
    Vorschau1.jpg
    206,5 KB · Aufrufe: 149
  • Vorschau2.jpg
    Vorschau2.jpg
    154,7 KB · Aufrufe: 163
  • Emulator (2).png
    Emulator (2).png
    36,5 KB · Aufrufe: 161
@enrem

Es folgt die Meldung "Fehler beim Ändern der Einstellung".
Woran könnte das liegen?

Das kann an Vielem liegen - zb. SAF nicht berücksichtigt ?

Aber du müsstest schon wissen , dass Du - wie auch wir - eher was mit dem ErroLog anfangen können.
Stell den doch mal hier mit dem Fehler ein.

Was sagt denn dein Step-by Step Debugging ?

Oder nur einen Post unter deinem steht auch schon was zu dem Thema
PDF.js kann externe PDF nicht laden (erst ab Android 11)
 
Zuletzt bearbeitet:
Danke swa00
Ich kann nur den Log bis zum erzeugen der Vorschau liefern. Wenn ich PDF wähle kommt nichts mehr. Vermutlich kannst du damit nichts anfangen. Ich wüsste nicht wo ich beim Step-by-Step debuggen ansetzen könnte denn nach dem webView.loadDataWithBaseURL() kommt ja von meiner Seite nichts mehr. Das Dumme ist, das ich den Fehler nur am Handy erzeugen konnte. Im Emulator konnte ich diesen bisher nicht reproduzieren. Ich weis das ist sehr verwirrent ist schon fast peinlich. Ja den Post zum Thema hatte ich mir schon angesehen.

Code:
2020-10-12 14:22:39.553 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: ViewPostIme pointer 0
2020-10-12 14:22:39.610 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: ViewPostIme pointer 1
2020-10-12 14:22:39.686 24249-24249 D/MyApp: openOrCreateDatabaseOnSDCard -> stundenbuch.sqlite
2020-10-12 14:22:39.696 24249-24249 D/Dialog: mIsSamsungBasicInteraction = false
2020-10-12 14:22:39.696 24249-24249 D/Dialog: mIsSamsungBasicInteraction = false, isMetaDataInActivity = false
2020-10-12 14:22:39.708 24249-24249 I/MultiWindowDecorSupport: updateCaptionType >> DecorView@bef2558[Druckvorschau], isFloating: true, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: false
2020-10-12 14:22:39.708 24249-24249 D/MultiWindowDecorSupport: setCaptionType = 0, DecorView = DecorView@bef2558[Druckvorschau]
2020-10-12 14:22:39.718 24249-24249 D/ScrollView: initGoToTop
2020-10-12 14:22:39.722 24249-24249 D/ScrollView: initGoToTop
2020-10-12 14:22:39.737 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: setView = com.android.internal.policy.DecorView@bef2558 TM=true MM=false
2020-10-12 14:22:39.738 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: stopped(false) old=false
2020-10-12 14:22:39.738 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: stopped(false) old=true
2020-10-12 14:22:39.738 24249-24249 D/MyApp: onRestart TimeSheet
2020-10-12 14:22:39.739 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: stopped(false) old=false
2020-10-12 14:22:39.739 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: stopped(false) old=false
2020-10-12 14:22:39.739 24249-24249 D/MyApp: onResume TimeSheet
2020-10-12 14:22:39.740 24249-24249 D/MyApp: Datenbank wird geöffnet bei onResume
2020-10-12 14:22:39.742 24249-24249 D/MyApp: openOrCreateDatabaseOnSDCard -> stundenbuch.sqlite
2020-10-12 14:22:39.757 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: MSG_WINDOW_FOCUS_CHANGED 0 1
2020-10-12 14:22:39.757 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@a7a9e37[PrintListConfigActivity]
2020-10-12 14:22:39.757 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:39.778 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=10 res=0x7 s={true 484081758208} ch=true
2020-10-12 14:22:39.944 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: Relayout returned: old=(0,93,1080,2256) new=(27,929,1053,1419) req=(1026,490)0 dur=17 res=0x7 s={true 484081602560} ch=true
2020-10-12 14:22:39.948 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:39.968 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: MSG_WINDOW_FOCUS_CHANGED 1 1
2020-10-12 14:22:39.972 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:40.013 24249-24249 D/MyApp: Close Database (Database war offen)
2020-10-12 14:22:40.015 24249-24249 D/ViewRootImpl@b301ca5[Druckvorschau]: dispatchDetachedFromWindow
2020-10-12 14:22:40.022 24249-24249 D/InputTransport: Input channel destroyed: '3610d94', fd=75
2020-10-12 14:22:40.031 24249-24249 I/WebViewFactory: Loading com.google.android.webview version 86.0.4240.75 (code 424007533)
2020-10-12 14:22:40.090 24249-24249 I/cr_LibraryLoader: Loaded native library version number "86.0.4240.75"
2020-10-12 14:22:40.090 24249-24249 I/cr_CachingUmaRecorder: Flushed 5 samples from 5 histograms.
2020-10-12 14:22:40.188 24249-24249 D/ConnectivityManager: requestNetwork; CallingUid : 10779, CallingPid : 24249
2020-10-12 14:22:40.192 24249-24249 D/ConnectivityManager: requestNetwork; CallingUid : 10779, CallingPid : 24249
2020-10-12 14:22:40.219 24249-26510 W/renem.timeshee: Accessing hidden method Landroid/media/AudioManager;->getOutputLatency(I)I (greylist, reflection, allowed)
2020-10-12 14:22:40.225 24249-26510 W/cr_media: Requires BLUETOOTH permission
2020-10-12 14:22:40.225 24249-26564 I/AdrenoGLES: Build Config                     : S P 8.0.12 AArch64
2020-10-12 14:22:40.230 24249-26564 I/AdrenoGLES: PFP: 0x016ee187, ME: 0x00000000
2020-10-12 14:22:40.267 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: MSG_WINDOW_FOCUS_CHANGED 1 1
2020-10-12 14:22:40.267 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@9657329[TimeSheetActivity]
2020-10-12 14:22:40.267 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:40.270 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@9657329[TimeSheetActivity]
2020-10-12 14:22:40.270 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:40.270 24249-24249 D/InputMethodManager: startInputInner - Id : 0
2020-10-12 14:22:40.270 24249-24249 I/InputMethodManager: startInputInner - mService.startInputOrWindowGainedFocus
2020-10-12 14:22:40.272 24249-24249 D/InputTransport: Input channel destroyed: 'ClientS', fd=80
2020-10-12 14:22:40.277 24249-24249 E/ViewRootImpl: sendUserActionEvent() mView returned.
2020-10-12 14:22:40.347 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)8 dur=5 res=0x5 s={false 0} ch=true
2020-10-12 14:22:40.355 24249-24249 D/Dialog: mIsSamsungBasicInteraction = false
2020-10-12 14:22:40.356 24249-24249 D/Dialog: mIsSamsungBasicInteraction = false, isMetaDataInActivity = false
2020-10-12 14:22:40.367 24249-24249 I/MultiWindowDecorSupport: updateCaptionType >> DecorView@2d82a52[Druckvorschau], isFloating: true, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: false
2020-10-12 14:22:40.367 24249-24249 D/MultiWindowDecorSupport: setCaptionType = 0, DecorView = DecorView@2d82a52[Druckvorschau]
2020-10-12 14:22:40.378 24249-24249 D/ScrollView: initGoToTop
2020-10-12 14:22:40.382 24249-24249 D/ScrollView: initGoToTop
2020-10-12 14:22:40.395 24249-24249 D/ViewRootImpl@da6f94d[Druckvorschau]: setView = com.android.internal.policy.DecorView@2d82a52 TM=true MM=false
2020-10-12 14:22:40.413 24249-24249 D/ViewRootImpl@da6f94d[Druckvorschau]: Relayout returned: old=(0,93,1080,2256) new=(27,929,1053,1419) req=(1026,490)0 dur=13 res=0x7 s={true 483945459712} ch=true
2020-10-12 14:22:40.417 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:40.422 24249-24249 D/ViewRootImpl@da6f94d[Druckvorschau]: MSG_WINDOW_FOCUS_CHANGED 1 1
2020-10-12 14:22:40.427 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:40.430 24249-24249 D/ViewRootImpl@da6f94d[Druckvorschau]: MSG_RESIZED: frame=(27,929,1053,1419) ci=(0,0,0,0) vi=(0,0,0,0) or=1
2020-10-12 14:22:40.444 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:40.447 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: MSG_WINDOW_FOCUS_CHANGED 0 1
2020-10-12 14:22:40.447 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@9657329[TimeSheetActivity]
2020-10-12 14:22:40.447 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:40.468 24249-24249 E/DecorView: mWindow.mActivityCurrentConfig is null
2020-10-12 14:22:40.517 24249-24249 D/ViewRootImpl@da6f94d[Druckvorschau]: dispatchDetachedFromWindow
2020-10-12 14:22:40.526 24249-24249 D/InputTransport: Input channel destroyed: '46e1484', fd=79
2020-10-12 14:22:40.528 24249-24249 D/MyApp: onPause TimeSheet
2020-10-12 14:22:40.531 24249-24249 D/MyApp: Close Database (Database war offen)
2020-10-12 14:22:40.547 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: MSG_WINDOW_FOCUS_CHANGED 1 1
2020-10-12 14:22:40.547 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@9657329[TimeSheetActivity]
2020-10-12 14:22:40.547 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:40.552 24249-24249 E/ViewRootImpl: sendUserActionEvent() mView returned.
2020-10-12 14:22:40.614 24249-24249 D/ViewRootImpl@701fcd8[TimeSheetActivity]: MSG_WINDOW_FOCUS_CHANGED 0 1
2020-10-12 14:22:40.614 24249-24249 D/InputMethodManager: prepareNavigationBarInfo() DecorView@9657329[TimeSheetActivity]
2020-10-12 14:22:40.614 24249-24249 D/InputMethodManager: getNavigationBarColor() -14606047
2020-10-12 14:22:40.621 24249-24249 D/InputTransport: Input channel destroyed: 'ClientS', fd=160
2020-10-12 14:22:40.727 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: stopped(true) old=false
2020-10-12 14:22:40.746 24249-24249 D/ViewRootImpl@a131581[PrintListConfigActivity]: dispatchDetachedFromWindow
2020-10-12 14:22:40.751 24249-24249 D/InputTransport: Input channel destroyed: '97a123c', fd=77

Hier der Code für meinen Aufruf (reduziert).
Code:
private void startWebView(String html) {

    // WebView für den Druck instantiieren
    final WebView webView = new WebView(mContext);

    WebSettings webSettings = webView.getSettings();
    webSettings.setBuiltInZoomControls(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setDefaultTextEncodingName("UTF-8");
    webSettings.setAppCacheEnabled(false);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
    webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDatabaseEnabled(true);
    webSettings.setLoadsImagesAutomatically(true);

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            PrintManager printManager = null;

            // Printmanager ab Android 6 möglich
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                printManager = mContext.getSystemService(PrintManager.class);
            }

            // Der Adapter stellt den Dokumentinhalt bereit
            PrintDocumentAdapter printAdapter = null;

            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                printAdapter = webView.createPrintDocumentAdapter("Testdokument");
            }

            PrintAttributes.Builder builder = new PrintAttributes.Builder();

            // Druckauftrag erstellen und übergeben
            String jobName = mContext.getString(R.string.app_name) + " "+mContext.getString(R.string.print_list_4);

            PrintJob printJob = printManager.print(jobName,printAdapter,builder.build());

        }
    });

    webView.clearCache(true);
 
    webView.loadDataWithBaseURL("file:///android_asset/",
            html, "text/HTML", "UTF-8", null);

}
Beiträge automatisch zusammengeführt:

Ich konnte das Problem möglicherweise eingrenzen.

Über den DocumentAdapter der WebView habe ich dieses Problem
Code:
printAdapter = webView.createPrintDocumentAdapter(documentName);
printManager.print(jobName,printAdapter,builder.build());
Über einen eigenen Adapter geht es. Das Problem ist nur das ich beim eigenen Adapter alles selbst erledigen muss. Oben übergebe ich lediglich eine HTML-Datei.
Code:
printManager.print(jobName,new PrintDocumentAdapterTest(mContext), builder.build());
 
Zuletzt bearbeitet:
Ich konnte mein Problem zwar nicht lösen jedoch mit einem Beispiel "webviewtopdf" bei Github eine alternative Routine zum erzeugen von PDF-Dateien schreiben. Die funktioniert nun. Mittels Intent rufe ich nach dem erzeugen der PDF bspw. Google PDF Viewer auf und das wars.

Noch ein Hinweis:
Bei GMail, OpenOffice und diverse andere Apps tritt das gleiche Problem auf. Jedoch nicht bei Google PDF Viewer.
 
Zuletzt bearbeitet:
Nach einem Systemupdate des Geräteherstellers, ist der oben beschriebene Fehler verschwunden.
 

Ähnliche Themen

Soljim
Antworten
5
Aufrufe
294
swa00
swa00
Manny87
  • Manny87
Antworten
11
Aufrufe
360
swa00
swa00
B
Antworten
6
Aufrufe
1.170
jogimuc
J
Zurück
Oben Unten