Hola qué tal.
apenas voy ingresando al foro ya que no había tenido el tiempo de hacerlo y poder responder.
el motivo por el cual la previsualización de la impresión de una imagen se mira en negro viene desde tu función:
Código Delphi
[-]function GetUriFromFile(const FilePath: string): Jnet_Uri;
var
FileObj: JFile;
begin
FileObj := TJFile.JavaClass.init(StringToJString(FilePath));
Result := TJnet_Uri.JavaClass.fromFile(FileObj);
end;
Ya que desde android 7 la forma de obtener el URI de un archivo se hace mediante algo llamado "FileProvider".
Si tienes Delphi Sydney a Athens (10.4-12) tu función quedaría así:
Nota: Recuerda que para usar esta nueva forma de obtener el uri tienes que:
Marcar la casilla de "Secure File Sharing" en "Project>Options>Application>Entitlement List
Código Delphi
[-]
uses
{$IFDEF ANDROID}
Androidapi.JNI.Webkit, FMX.Dialogs.Android,
Androidapi.JNI.Print, System.Messaging,
fmx.Platform.Android, Androidapi.jni,
fmx.helpers.android, Androidapi.Jni.app,
Androidapi.Jni.GraphicsContentViewText, Androidapi.JniBridge,
Androidapi.JNI.Os, Androidapi.Jni.Telephony,
Androidapi.JNI.JavaTypes,Androidapi.Helpers,
Androidapi.JNI.Widget,System.Permissions,
Androidapi.Jni.Provider,Androidapi.Jni.Net,
AndroidAPI.JNI.Support;
{$ENDIF}
function GetUriFromFile(const FilePath: string): Jnet_Uri;
var
FileObj: JFile;
begin
FileObj := TJFile.JavaClass.init(StringToJString(FilePath));
Result := TAndroidHelper.JFileToJURI(FileObj);
end;
Embarcadero creó esa función del TAndroidHelper para dicho propósito.
Finalmente lo que mencionas de la disponibilidad de tu impresora me suena más a las configuraciones de la misma y no a la implementación desde Delphi.
Saludos.