4

添付ファイルの送信を急増させるために使用しているシンプルなアプリがあります。

SDカードからテキストファイルを送信できましたが(を使用してアプリのプライベートエリアで作成されたファイルでこれを機能させることはできませんでしたopenFileOutput(fileName, 0))、データベースを送信したいと思います。

デバッグすることで、データベースが存在し、その唯一のテーブルにエントリがあることを確認できます。送信するコードは次のようになります。

gmailButton = (Button) findViewById(R.id.button);
gmailButton.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        Intent sendIntent = new Intent(Intent.ACTION_SEND); 
        sendIntent.putExtra(Intent.EXTRA_SUBJECT, "subject line"); 
        sendIntent.putExtra(Intent.EXTRA_TEXT,"Body of email"); 
        Uri uri = Uri.fromFile(getDatabasePath("TEST_DB"));
        //uri = file:///data/data/com.gmailspike/databases/TEST_DB
        sendIntent.putExtra(Intent.EXTRA_STREAM, uri); 
        sendIntent.setType("application/octet-stream");

        startActivity(Intent.createChooser(sendIntent,"Email:"));
    }
})

;

ただし、電子メールクライアントを開くと、添付ファイルのサイズは0バイトであり、タッチして添付ファイルを開くと、クライアントはファイルが見つからないと表示します。

何か案は?mimeタイプが正しいかどうか、またはそれが重要であるかどうかはわかりません。

4

2 に答える 2

4

アプリのプライベートデータフォルダーに保存されているファイルにリンクして、画像を添付したメールを送信しようとしたときにも、このような問題が発生したことを覚えています。添付ファイルがありません。

メールインテントを使用すると、メール作成を処理するための新しいアプリケーションが開きます。したがって、他のアプリケーションがプライベートデータにアクセスできるようにコンテンツプロバイダーを作成する必要があります。

または、最初にコンテンツをパブリックエリアにコピーし、そこからメールインテントに追加します(これは、SDカードがほとんどの電話に存在する場合にのみ機能します)。その場合、 External Storage.getExternalStorageDirectory()を使用できます。

これが解決策を見つけるのに役立つことを願っています。

于 2011-08-23T21:15:19.643 に答える
1

MIMEタイプに関しては、アプリケーションがインテントに応答し、を介して検出されるように(明示的にまたはワイルドカードを介して)それをサポートする必要があるため、これは確かに重要createChooserです。

たとえば、Gmailはで*/*MIMEタイプとして受け入れると思いますACTION_SENDが、他のメールクライアントについては知りません。

編集:そして許可についてはFLAG_GRANT_READ_URI_PERMISSION、Intentクラスのフラグを見てください:http://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION

于 2011-08-23T21:09:29.033 に答える