IMにおけるピクチャメッセージ処理(一)


最近開発中のリーダーが画像メッセージの処理を要求し、約2日間ですべての開発任務を完了し、残りは最適化作業である.
私が書き終わったばかりなので、私は熱いうちに鉄を打って、開発過程を整理して、後でこのモジュールを改善するのに便利です.もし問題があれば、皆さんもタイムリーに提出してください.改善しやすくて、一緒に進歩します.
この節から、いくつかの部分に分けて一つ一つ整理します.
画像を送信するには、まず画像を選択し、直接コードを入力します.
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
((Activity) getContext()).startActivityForResult(intent, IMFragment.REQUEST_CODE_SEND_IMAGE);

Intentには「ACTION_GET_CONTENT」という文字列定数があり、ユーザーが特定のタイプのデータを選択し、そのデータのURIを返す.
この定数を利用して、タイプを「image/*」に設定すると、Android携帯電話内のすべてのimageが得られます.
APIではこう言います.
ACTION_GET_CONTENT with MIME type */* and category CATEGORY_OPENABLE -- Display all pickers for data that can be opened with ContentResolver.openInputStream(), allowing the user to pick one of them and then some data inside of it and returning the resulting URI to the caller. This can be used, for example, in an e-mail application to allow the user to pick some data to include as an attachment.
以上の方法でintentに画像のuriが含まれている.
ローカルから画像を取得すると、必ず画像選択画面から初期画面に戻ります.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == REQUEST_CODE_SEND_IMAGE) {
            Uri uri = data.getData();
            if (uri == null) {
                return;
	    }
            String imagePath = Utils.getImagePath(getActivity(), uri);
            if (!TextUtils.isEmpty(imagePath)) {
                if (imagePath.startsWith("file://")) {
                    imagePath = imagePath.substring(7);
                }
                //          
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

さっき選択した画像のuriをdataから取得します(uri:content://com.android.providers.media.documents/document/image%3A1732)
その後は主にuriによりimagePathを取得する、送信は主にimagePathを用いる.(/storage/emulated/0/sina/weibo/.weibo_pic_newthumb.3924028656085872.jpg)
ここには送信操作を実行するインタフェースが残っており,次節では画像の送信から開始する.