2017-02-20 6 views
0

좋아, 나는 잠시 동안이 문제를 해결해 왔고, 나는 그것을 얻지 못하고있다. 여러 링크의 제안 사항 중 어느 것도 문제를 해결하지 못했습니다.이메일 의도를 사용하여

파일 전송을위한 응용 프로그램을 성공적으로 설정했습니다. 현재, 나는 그 파일을 내 응용 프로그램으로 여는 중 일하고있다.

받은 이메일의 파일을 클릭하면 내 활동이 열립니다.

내 응용 프로그램에서 사용하는 외부 저장소 폴더에 로컬로 파일을 저장해야합니다.

그래서 파일을 클릭하고 의도 필터가 올바른 활동을 열면 그 파일에 액세스하기 위해 다음에 무엇을합니까?

텐트 필터 :

<intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
      <data android:pathPattern=".*\\.gmgt" /> 
     </intent-filter> 

활동 : 파일을 전송하는 데 사용

public class ActFileReceiver extends Activity { 

private TextView label; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_file_receiver); 

    label = (TextView) findViewById(R.id.lblFileRecieverText); 


} 

}

의도 : 당신은 ACTION_VIEW을 지원하기 위해 찾고있는

public void emailFile(File file) { 
    Uri fileURI = Uri.fromFile(file); 
    Intent mailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    mailIntent.setType("messsage/vnd.com.boardmonkey.TABLETop.gamefile"); 
    mailIntent.putExtra(Intent.EXTRA_SUBJECT, "TABLETop game file: " + file.getName()); 
    mailIntent.putExtra(Intent.EXTRA_STREAM, fileURI); 
    startActivity(Intent.createChooser(mailIntent, "Send Mail With...")); 
} 
+0

"나는 코드 샘플이 없습니다."- 물론 그렇게합니다. 질문에 따라 활동이 있고''가 있습니다.'가 무엇을 위해서 ('ACTION_VIEW'?'ACTION_SEND'?) 다른 무엇을 할 것인가에 대한 세부 사항은 다양합니다. 그러니 적어도 우리에게 그것을주십시오. – CommonsWare

+0

충분히 공정하고, 그렇게 깊은, 내 잘못 생각하지 않았습니다. 내가 실제로하는 것을 반영하도록 편집 됨. –

+0

action_sendto가 정상적으로 작동하면 내 응용 프로그램이 장치에서 보낼 수있는 응용 프로그램을 통해 파일을 성공적으로 보냅니다. –

답변

0

. 당신이 the documentation for ACTION_VIEW 보면, 당신은 발견 할 것이다 :

입력 :있는 GetData() 데이터를 검색 할 URI입니다.

여기서 "입력"은 startActivity()을 호출 한 사람이 사용자가 선택한 활동이있는 사람에게 보낸 데이터를 나타냅니다. 그리고 Intent 조치 문서에 언급 된 메소드는 Intent 자체를 참조하십시오.

그래서, 당신의 활동을 만드는 데 사용 된 Intent를 검색 할 getIntent()를 호출하고 당신이 볼 해야하는 내용에 Uri를 얻기 위해 그것을 getData()를 호출합니다.


이제 문제가 발생하기 시작합니다. 특히 android:pathPattern을 사용하려고합니다. 두 가지 문제가 있습니다.

  1. You cannot use android:pathPattern without also specifying android:scheme and android:host

  2. 그것은 2017이며 몇 가지 파일 확장자를 더 이상 사용하지 않습니다. 특히 대부분의 콘텐츠는 Uri 값을 통해 content 스키마와 공유되며 contentUri은 파일 확장자가 없습니다.

android:pathPattern를 사용하는 유일한 반 효과적인 방법은, (android:scheme를 통해) file 계획에 자신을 제한 앱이 시간이 지남에 따라 응용 프로그램의 지속적 감소 번호와 상호 것이라는 사실과 함께 사는 것입니다.

+0

오케이, 이것이 내가 놓친 것입니다 !! 내 응용 프로그램은 다른 응용 프로그램과 상호 운용 할 필요가 없습니다. 파일을 공유 할 필요가있는 모음입니다. 텍스트 또는 sms 문서와 같은 출력 파일은 각자의 의도대로 별도로 포맷됩니다. 즉 파일 이름이 페이스 북을 통해 공유되는 이름은 파일에서 문자열로 끌어 당겨 텍스트로 전송됩니다. 그래서, scheme과 host : 내 파일은 내 응용 프로그램에서 만든 객체의 직렬화 된 파일이므로 scheme : file 일뿐입니다. "host"를 찾아 볼 것입니다. 이메일이나 웹과 같은 파일의 원본이라고 가정합니다. –

+0

@ JohnHaines : "내 앱은 다른 앱과 상호 운용 할 필요가 없습니다."- 그렇습니다. 현재 귀하의 앱은 * 모든 * 앱이 콘텐츠를 시청하도록 요청할 수 있다고 광고하고 있습니다. 그것이 당신이 원하는 것이 아니라면, 당신은 다른 접근법을 취할 필요가 있습니다. – CommonsWare

+0

모든 앱에서 파일을 볼 수 있습니다. 그것들은 직렬화 된 객체이기 때문에 아무 것도 할 수 없습니다. 만약 누군가가 그 객체를 해석하는 응용 프로그램을 작성하려고한다면 그것은 나를 괴롭히지 않습니다. 난 그냥 내 애플 리케이션 파일을 로컬로 저장 싶어요. –