/// <summary> /// liefert selbst innerhalb des secondary ext. storage bei Oreo eine Exception: "Copy not supported" /// <para>Das scheint eine Exception der abstrakten Klasse DocumentProvider zu sein, d.h. die Copy-Funktion wurd in der konkreten Klasse nicht implemetiert. /// Das Flag FLAG_SUPPORTS_COPY für Dokumente fehlt (deswegen).</para> /// </summary> /// <param name="storagenamesrc"></param> /// <param name="volpathsrc"></param> /// <param name="storagenamenewparent"></param> /// <param name="volpathnewparent"></param> /// <returns></returns> public bool Copy(string storagenamesrc, string volpathsrc, string storagenamenewparent, string volpathnewparent) { DocumentFile srcdoc = GetExistingDocumentFile(storagenamesrc, volpathsrc); DocumentFile dstparentdoc = GetDocumentFile(storagenamenewparent, volpathnewparent, true); // Zielverzeichnis (wird notfalls erzeugt) /* Added in API level 24; Nougat, 7.0, Deprecated in API level Q * * public static Uri copyDocument (ContentResolver content, * Uri sourceDocumentUri, Document mit FLAG_SUPPORTS_COPY * Uri targetParentDocumentUri) * * neu: * ContentProviderClient provclient = Activity.ContentResolver.AcquireUnstableContentProviderClient(srcdoc.Uri.Authority); * DocumentsContract.CopyDocument(provclient, srcdoc.Uri, dstparentdoc.Uri); * * intern: * Bundle inbundle = new Bundle(); * inbundle.PutParcelable(DocumentsContract.EXTRA_URI, srcdoc.Uri); "uri" * inbundle.PutParcelable(DocumentsContract.EXTRA_TARGET_URI, dstparentdoc.Uri); "android.content.extra.TARGET_URI" * Bundle outbundle = provclient.Call(METHOD_COPY_DOCUMENT, null, inbundle); "android:copyDocument" * return outbundle.GetParcelable(DocumentsContract.EXTRA_URI); "uri" */ global::Android.Net.Uri newuri = DocumentsContract.CopyDocument(Activity.ContentResolver, srcdoc.Uri, dstparentdoc.Uri); System.Diagnostics.Debug.WriteLine("AndroidCopy(" + storagenamesrc + ", " + volpathsrc + ", " + storagenamenewparent + ", " + volpathnewparent + ") = " + (newuri != null).ToString()); return(newuri != null); }