2

Android アプリで、あるデバイスから別のデバイスにさまざまな方法 (メール、Bluetooth など) でファイルを送信できるようにしたいと考えています。

私の最初の使用例は電子メールです。これは、SEND インテントを生成するために使用しているコードです。

            Intent shareIntent = new Intent();
            shareIntent.setAction(Intent.ACTION_SEND);
            shareIntent.setType("text/xml");
            shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
            startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.share_list)));

これをシミュレータ (Android 2.1) で実行すると、結果のメールの添付ファイル セクションは次のようになります。

Content-Type: ;

ただし、Galaxy Nexus (Android 4.2.2) でこれを実行すると、添付ファイルのセクションに次のように表示されます。

Content-Type: application/tpl;

これは、渡された URI が で終わることが原因である可能性があります.tpl

これは私が期待していたものです:

Content-Type: text/xml;

ここで何か不足していますか?アプリケーションの受信側でインテント フィルターを使用できるように、メールの添付ファイルの MIME タイプが正しいことが重要です。

4

3 に答える 3

0

いくつか提案があります。

  1. putExtra の代わりに setData を使用します。それとも、すでに setData を別の目的で使用していますか? いずれにせよ、データを設定した後に MIME タイプを設定してください。setdata のドキュメントから: 「このインテントが動作しているデータを設定します。このメソッドは、setType(String) または setTypeAndNormalize(String) によって以前に設定されたタイプを自動的にクリアします。」http://developer.android.com/reference/android/content/Intent.html#setData(android.net.Uri)

  2. putExtra を使用した後にsetTypeを使用します。putExtra を使用すると、データから MIME タイプが (誤って) 推測され、設定したばかりの MIME タイプが上書きされる可能性があります。

  3. setDataAndType(Uri データ、文字列型) を使用します。ドキュメントによると、MIME タイプはデータから推測する必要があるため、めったに使用しないでください。ただし、それがうまくいかない場合でも、これを試すことができます。ドキュメントから:「このメソッドはめったに使用しないでください。通常はデータから推測される MIME タイプを、ここで指定された独自のタイプでオーバーライドできます。」http://developer.android.com/reference/android/content/Intent.html#setDataAndType(android.net.Uri,%20java.lang.String)

編集: 上記の提案は、適切なコンテンツ タイプを設定するためのものであり、電子メール アプリのみをアプリ チューザー ダイアログに表示するためのものではありません。Android では、アプリ チューザー ダイアログでメール アプリのみを取得する正しい方法はありません。あなたのアプリは送信したいコンテンツの種類を指定することができ、また指定する必要があります。他のアプリは、あなたの種類のコンテンツを送信できるかどうかを指定できます。それはメール アプリかもしれませんが、たとえば「アプリとは」などです。とにかく、ユーザーがファイルを電子メール アプリにのみ送信できるように制限する必要があるのはなぜですか? ファイルを特定の電子メール アドレスに送信する場合は、それは異なります。受信者の電子メール アドレスをインテントに設定する必要があります。その後、メール アプリのみがアプリ選択ダイアログに表示されます。

于 2013-05-17T21:39:25.160 に答える
0

Web コンテンツ タイプについて言及していると思いますが、

ケースにはこのタイプが必要です(メール/メッセージ)i.setType("message/rfc822");

この投稿を参照してください

私はこれがうまくいくことを願っています..

于 2013-05-17T05:09:24.317 に答える
0

whats app の場合、このコードは機能します... whats app はデータ以外の詳細をほとんど必要としないため..取引はこちら

                               Intent waIntent = new Intent(Intent.ACTION_SEND);

                               waIntent.setType("text/plain");
                               waIntent.setPackage("com.whatsapp");
                               waIntent.setType("image/*");
                               waIntent.putExtra(Intent.EXTRA_TEXT, INFO);
                               waIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(file_PATH)));


                               startActivity(Intent.createChooser(waIntent, "Share with Whatsapp"));

                 for other such as gmail or any mail - just remove the package and set type whatever you like an iamge or file or anything that it supports,for bluetooth it works too...and for whats app i shared the code with you.

それがすべてあなたに役立つことを願っています

于 2013-05-17T06:22:35.720 に答える