2016-08-22 20 views
0

私は自分のアプリ内でフィードバック機能を使用しています。ギャラリーから画像を選択し、メッセージを入力して送信ボタンを押すとコードが送信されます私は "空のファイルを添付することはできません"トーストメッセージを得るまで、すべてがうまく動作するように見える、これは私がどのくらい遠いですか(これは、下の図)ボックスからテキストを取得し、電子メールの意図に添付して全体を送信するコードAndroid - 画像を電子メールに添付

String rating = String.valueOf(RateBar.getRating()); 
      String subject = Feedback.getText().toString(); 
      String FileLocation = FilePathPreview.getText().toString(); 
      String to ="[email protected]"; 
      String message = UserInput.getText().toString(); 
      String body = "Rating : "+rating+" out of 5"+ 
        "\n "+message; 
      Intent email = new Intent(Intent.ACTION_SEND); 
      email.putExtra(Intent.EXTRA_EMAIL, new String[]{to}); 
      email.putExtra(Intent.EXTRA_SUBJECT, subject); 
      email.putExtra(Intent.EXTRA_TEXT, body); 
      email.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+FileLocation)); 

      //need this to prompts email client only 
      email.setType("message/rfc822"); 

      startActivity(Intent.createChooser(email, "Choose an Email client :")); 

public void grabImg(){ 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, 
      "Select Picture"), SELECT_PICTURE); 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     if(resultCode == RESULT_OK){ 
      Uri selectedImage = imageReturnedIntent.getData(); 
      String PathP = selectedImage.getPath().toString(); 
      FilePathPreview.setText(PathP); 
     } 
} 

Feedback activity

になりました
+0

'file:/'はあなたのコードを壊していると思います。それを取り除くことを試みなさい。 – theFunkyEngineer

+0

'Uri'のスキームが' file'でない限り、 'String PathP = selectedImage.getPath()。toString();'は役に立ちません。また、 'ACTION_SEND'は*' EXTRA_TEXT' *または* 'EXTRA_STREAM'のいずれかをサポートしていることに注意してください。 – CommonsWare

+0

'String FileLocation = FilePathPreview.getText()。toString();'あなたは何を言っていませんでした。あなたはもちろんそうです。 – greenapps

答えて

2

その後、

 //.... 
     email.putExtra(Intent.EXTRA_STREAM, uri); 
     //.... 
     //need this to prompts email client only 
     email.setType("message/rfc822"); 

     startActivity(Intent.createChooser(email, "Choose an Email client :")); 

に同じuri変数を渡すonActivityResult()

Uri uri = null; 

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     if(resultCode == RESULT_OK){ 
      Uri selectedImage = imageReturnedIntent.getData(); 
      uri = selectedImage; // here set the uri 
      String PathP = selectedImage.getPath().toString(); 
      FilePathPreview.setText(PathP); 
     } 
} 

にURIを保存し、その後の更新globale Uri変数を作成します:もしあなたはまだカントシェア

このフラグを追加

email.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)

+0

'Intent'はフラグとしてフラグ' FLAG_GRANT_READ_URI_PERMISSION'を追加する必要があります。 'ACTION_SEND'実装は' Uri'に対する権利を持っていないかもしれません。 – CommonsWare

+0

@CommonsWareは、許可を追加する方法と場所をコードで提供してください。 –

+0

@CommonsWareは、彼がイメージを選んでいるときに記憶権を読み込んでいなければなりません....彼はまだ 'FLAG_GRANT_READ_URI_PERMISSION'が必要ですか? –

1

この方法をお試しください。

Uri selectedImageUri = data.getData(); 
String PathP; 
Cursor cursor = getContentResolver().query(selectedImageUri, null, null, null, null); 
if(cursor != null) 
{ 
    cursor.moveToFirst(); 
    int idx =cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    PathP = cursor.getString(idx); 
    cursor.close(); 
} 
関連する問題