2015-01-22 2 views
1

나는 안드로이드 응용 프로그램을 작성 중입니다. 이 앱은 Gmail 위에 구축되었습니다. 다른 앱의 파일을 첨부 할 수있는 기능을 추가하고 싶습니다. 이 작업을 수행하는 첫 번째 앱은 맞춤 상자 앱 (상자 SDK로 제작)입니다. 현재 인 텐트를 보내고 Box App에서 활동을 열고 첨부 파일을 선택하여 돌아올 수 있습니다. 그러나 내 Box-SDK 앱에서 항목을 선택하고 나면 Gmail 앱 (또는 의도의 원래 발신자)으로 제대로 되돌릴 수있는 데이터로 변환하는 방법을 모릅니다. 나는 또한 그 데이터를 의도의 창안자에게 보내는 방법을 모른다.Gmail에서 '첨부'하는 방법에 응답 하시겠습니까? 첨부 파일의 의도에 대한 응답

setResult()가 관련되어 있지만, 어디에 넣을 지 잘 모르며, 상자에서 선택한 데이터를 전자 메일 앱으로 옮기는 데 제대로 사용하는 방법을 모르겠습니다.

현재 첨부 파일없이 Gmail로 돌아가서 다운로드가 완료되었다고합니다. 여기

는 코드 내가 현재 가지고 :

"다양한 방법에 있습니다 : 페이지에서

https://developer.android.com/reference/android/support/v4/content/FileProvider.html#ServeUri

:

private void onFileSelected(final int resultCode, final Intent data) { 
     if (Activity.RESULT_OK != resultCode) { 
      Toast.makeText(this, "fail", Toast.LENGTH_LONG).show(); 
     } 
     else { 
      final BoxAndroidFile file =  data.getParcelableExtra(FilePickerActivity.EXTRA_BOX_ANDROID_FILE); 
      AsyncTask<Null, Integer, Null> task = new AsyncTask<Null, Integer, Null>() { 

       @Override 
       protected void onPostExecute(Null result) { 
        Toast.makeText(MainActivity.this, "done downloading", Toast.LENGTH_LONG).show(); 
//     Intent result2 = new Intent(); 
//     result2.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" +)); 
//     setResult(Activity.RESULT_OK, result2); 
////     setResult(resultCode, data); 
        super.onPostExecute(result); 
        finish(); 
       } 

       @Override 
       protected void onPreExecute() { 
        Toast.makeText(MainActivity.this, "start downloading", Toast.LENGTH_LONG).show(); 
        super.onPreExecute(); 
       } 

       @Override 
       protected Null doInBackground(Null... params) { 
        BoxAndroidClient client = ((HelloWorldApplication) getApplication()).getClient(); 
        try { 
         File f = new File(Environment.getExternalStorageDirectory(), file.getName()); 
         Intent result2 = new Intent(); 
         result2.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + f.getAbsolutePath())); 
         setResult(Activity.RESULT_OK, data); 
//      setResult(resultCode, data); 
         System.out.println(f.getAbsolutePath()); 
         client.getFilesManager().downloadFile(file.getId(), f, null, null); 
        } 
        catch (Exception e) { 
        } 
        return null; 
       } 
      }; 
      task.execute(); 

     } 
    } 




@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == AUTH_REQUEST) { 
     onAuthenticated(resultCode, data); 
    } 
    else if (requestCode == UPLOAD_REQUEST) { 
     onFolderSelected(resultCode, data); 
    } 
    else if (requestCode == DOWNLOAD_REQUEST) { 
     onFileSelected(resultCode, data); 
    } 
} 
+0

전화 나는 여분의 의도 result2 = 새로운 의도()와 같은 파일 URI를 새로운 의도 한 결과를 설정하여, 그것을 알아 내기 위해 관리 .parse ("file : //"+ f.getAbsol utePath())); getActivity(). setResult (Activity.RESULT_OK, result2); –

답변

0

파일 공급자를 사용하십시오 클라이언트 응용 프로그램에 파일의 콘텐츠 URI를 제공합니다. 일반적인 방법 중 하나는 클라이언트 응용 프로그램이 startActivityResult()를 호출하여 응용 프로그램을 시작하는 것입니다.이 응용 프로그램은 Intent 앱에서 활동을 시작하려면 앱으로 이동합니다. 이에 대한 응답으로 앱은 콘텐츠 URI를 클라이언트 앱에 즉시 반환하거나 사용자가 파일을 선택할 수있는 사용자 인터페이스를 제공 할 수 있습니다. 후자의 경우 사용자가 파일을 선택하면 앱에서 콘텐츠 URI를 반환 할 수 있습니다. 우리는이 코드를 수정할 수 있습니다

public void showCameraScreen(View view) { 
// BUILT IN CAMERA 
Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
camera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this))); 
this.startActivityForResult(camera, 1); 

} 

private File getTempFile(Context context) { 
// it will return /sdcard/MyImage.tmp 
final File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName()); 
if (!path.exists()) { 
    path.mkdir(); 
} 
return new File(path, "MyImage.tmp"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
if (requestCode == 1 && resultCode == RESULT_OK) { 
    final File file = getTempFile(this); 

    byte[] _data = new byte[(int) file.length()]; 
    try { 
     InputStream in = new FileInputStream(file); 
     in.read(_data); 
     in.close(); 
     in = null; 
     //DO WHAT YOU WANT WITH _data. The byte array of your image. 
    } catch (Exception E) { 

    } 
} 
} 

, 그것이 말하는 // 당신이 원하는 무엇을 할 : 위의 두 가지 경우, 응용 프로그램은 다른 유래 답변에서 setResult를 통해 전송 텐트() "

에 내용 URI를 반환 열린 우리당 ( result2.setData하며 _data으로, 단지

public final void setResult (int resultCode, Intent data)