2016-10-25 12 views
0

.Net Desktop App과 Xamarin.Forms Android 앱간에 파일을 교환하려고합니다. 정말 자원과 도움을받는 데 어려움을 겪었으므로이 질문을 다른 관심있는 사용자 (Xamarin Forms뿐 아니라)에게도 전달해달라고하십시오.Xamarin.Forms Android 파일 교환, MTP

지금까지 파일과 폴더를 .NET의 C#에서 읽어야했습니다. Christophe Geers' BlogFun with MTP와 쓰기는 벽의 Xamarin.Forms 측면에서 내 장치 Windows File Stuff by Flauschig

모두에서 작동하지 않았기 때문에 내가 먼저 Xamarin docA lib to store from pcl code 또한 Plugin.Permissions 비틀 거렸다.

위의 모든 소스를 통해 Android (Samsung A5, Android 6.0)에서 읽기 및 쓰기 기능을 사용할 수있었습니다.

public string GetExternalFolder() 
    { 
     GetPermission(); 

     var externalFolder = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path, "Android", "data", "com.exampledom.appname", "files"); 
     if (!Directory.Exists(externalFolder)) 
      CreateFolderStructure(); 

     return externalFolder; 
    } 

GetPermission() Plugin.Permissions에서 가져 허가가 주어지지 않은 경우 예외가 발생합니다 : this description on filestructure와 나는 다음과 같은 코드가 항상 유효한 경로를 얻을 것이다 생각했다.

CreateFolderStructure()는 pcl.storage을 사용하며 다음과 같이 표시됩니다.

private async void CreateFolderStructure() 
    { 
     try 
     { 
      IFolder rootFolder = await FileSystem.Current.GetFolderFromPathAsync(Path.Combine(Android.OS.Environment.ExternalStorageDirectory.Path)); 
      var subpaths = new[] {"Android", "data", "com.exampledom.appname", "files"}; 
      foreach (var dir in subpaths) 
      { 
       if (!string.IsNullOrEmpty(dir)) 
        rootFolder = await rootFolder.CreateFolderAsync(dir, CreationCollisionOption.OpenIfExists); 
      } 
      Log("Folder structure created!"); 

     } 
     catch (Exception e) 
     { 
      Log("Folder structure cannot be created!"); 
      Console.WriteLine("Failed to log! " + e.Message); 
     } 
    } 

자, 이제 질문 : 나만의 테스트를 하나 개의 장치 (개념 증명)에 생성이 방법에 의해 생성되는 폴더 - 아무 일도 발생하지 않습니다 다른 모든 (예를 들어 삼성 A3, 안드로이드 6.0) (무기력한 개발자의 증거). reboot은 해결책이 아닙니다. 또한이 장치에서 작동합니다. - 권한이 예상대로 요청됩니다. 다른 장치에 대한 권한 요청이 없습니다.

설치 중에 원하는 폴더가 만들어지지 않는 이유는 무엇입니까? 다른 모든 앱에는 'Android/data/com.exampledom.appname/files'폴더가 있습니다.

무엇이 누락 되었습니까? 안드로이드로 가져 오기/내보내기가 너무 힘들 것 같습니다.

+0

다시 말하지만, 처음에는 APK를 설치할 때 구조가 안드로이드에서 필수적으로 보이는 이유를 설명하고자합니다. 다른 모든 앱은 'Android/data'아래에 해당 폴더가 있습니다. 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. – smack

답변

0

@smack CreationCollisionOptions.OpenIfExists는 실제로 폴더를 만드나요? 나는 그렇게 생각하지 않는다. CreateIfNotExists 열거 형이 없습니까?

+0

메서드는 'CreateFolderAsync'라고합니다. 폴더를 만듭니다. 또한 그것은 하나의 휴대 전화에서 작동합니다. – smack