コード例 #1
0
            /// <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);
            }