2011-01-08 6 views
1

私は、ユーザーが画像を送信できるアプリケーションを持っています。この画像は、g-mail、facebook、flickr、私が興味を持っているテキストメッセージなど、さまざまな方法で送ることができます。次のコードを実行すると、利用可能ないくつかのオプションがダイアログボックスにポップアップ表示されます。アプリケーションがIntent.ACTION_SENDを使用する場合の電話機の違いを扱う

 Uri uri = Uri.fromFile(new File(externalDirectory + FILE_DIRECTORY + fileName));  
     Intent intent = new Intent(Intent.ACTION_SEND); 
     intent.putExtra(Intent.EXTRA_STREAM, uri); 
     intent.setType("image/png"); 
     startActivity(intent); 

私のドロイドXでは、テキストメッセージングオプションが表示され、このコードはMMSに画像を完全に追加します。

エミュレータでは、(別のオプションがないので)テキストメッセージが自動的に選択され、もう一度効果があります。

私のDroid Incredibleでは、テキストメッセージングオプションはありません。しかし、私は手動で組み込みのテキストメッセージングユーティリティを起動し、画像を追加してから送信することができます。私も市場からSMS/MMSアプリをダウンロードした後、このサードパーティのプログラムを使って画像を送るオプションをリストから利用できました。

なぜ、テキストメッセージはDroid Incredibleのオプションで利用できないのですか?それを選択肢にするためには何が必要なのですか?アクセスしていない電話の種類でこの問題(または不明な問題)をどのように評価しますか?

答えて

2

私はこれに関するいくつかの他の質問の助けを借りて、これを回避することができました。

基本的に、キーはHTCによって使用される意図を決定していましたが、これはアンドロイド.intent.action.SENDインテントを変更した唯一の会社(現在)です。オプションをリストに追加するコードは次のとおりです。

Uri uri = Uri.fromFile(new File(mFile)); 
Intent intent = new Intent(Intent.ACTION_SEND); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 
intent.setType("image/png"); 

Intent htcIntent = new Intent("android.intent.action.SEND_MSG"); 
htcIntent.setType("image/png"); 
htcIntent.putExtra(Intent.EXTRA_STREAM, uri); 

Intent chooser = Intent.createChooser(intent, "Send Method"); 
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { htcIntent }); 
startActivity(chooser); 
+1

@ user432209:* sigh *。それはいくつかのレベルではちょっと面倒です - 彼らがそのアクションを変更した理由はありませんし、 'android.intent.action.SEND_MSG'を発明してはいけません(もしあれば' com.htc.intent.action .SEND_MSG')。 – CommonsWare

+0

私は完全に同意します。それは基本的に製造業者の独裁政治を修正している。 – user432209

+0

MIMEタイプはimage/pngでなければなりません。image/*は動作しません。 – Freddroid

2

なぜ、テキストメッセージはDroid Incredibleのオプションで利用できないのですか?

彼らはそれを提供しなかったので。

私はあなたがすることはできません、それ抽象的でオプション

作るために行うには何が必要です。 AndroidのCompatibility Definition Documentを引用

Androidの上流のプロジェクトは、このようなように、電話ダイヤラ、カレンダー、連絡先帳、音楽プレーヤー、およびなどのコアアプリケーションの数を定義します。デバイス 実装者は、これらのアプリケーションを代替バージョンに置き換えてもよい(MAY)。

ただし、そのような代替バージョンは、上流プロジェクトによって提供される同じ意図パターンを守らなければなりません。たとえば、デバイスに代替音楽プレーヤー が含まれている場合でも、サードパーティのアプリケーションが発行したインテントパターンを使用して曲を選択する必要があります。

キャッチは、メッセンジャーアプリはGoogleによって「コアアプリケーション」とはみなされないということです。したがって、デバイスメーカーは独自のSMSクライアントを含めることを歓迎し、独自のIntentフィルタを使用します。 HTC Incredibleの場合、明らかに彼らはimage/pngACTION_SENDIntent経由のMMSのサポートを含んでいませんでした。

今、IMHO、Messengerはおそらくコアアプリケーションである必要があります。しかし、あなたの意見と私の現実は変わらない。私は携帯電話の種類を使用してこの問題(OR UNKNOWN問題を)評価しない方法

は、私はあなたがそれが「問題」にならないように、アプリケーションを再定義

にはアクセスできません。あなたはFacebookのアプリがインストールされているという保証がないのと同じように、MMSを送信できるという保証はありません。

私はMMSについてよく知らないし、ACTION_SEND以外の方法でMMSを送信する方法があるかどうかは不明です。 Messengerアプリのソースコードを突き抜けて、それがどのように機能するかを確認することもできます。次に、能力をあなたのアプリに直接焼きます。これにはいくつかの追加のアクセス許可(SEND_SMS、おそらくREAD_CONTACTS)が必要となり、書き込みには迷惑になりますが、デバイス間で動作する可能性が高くなります。

+0

これは興味深いドキュメントです。その点でGoogleは多くの柔軟性を許しているようですが、それは祝福や呪いでもあります。詳細な応答をありがとう! – user432209

+0

かなり良い仕事を見つけることができました。下記を参照して、もう一度感謝します。 – user432209

関連する問題