package com.kaixin.android.activity;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
import org.json.JSONArray;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.kaixin.android.KXActivity;
import com.kaixin.android.R;
import com.kaixin.android.result.LocationResult;
import com.kaixin.android.utils.ActivityForResultUtil;
import com.kaixin.android.utils.RecordUtil;
import com.kaixin.android.utils.TextUtil;
/**
* 录音类
*
* @author rendongwei
*
*/
public class VoiceActivity extends KXActivity {
private LinearLayout mParent;
private Button mCancel;
private Button mDetermine;
private EditText mContent;
private ImageView mPhoto;
private LinearLayout mDisplayVoiceLayout;
private ImageView mDisplayVoicePlay;
private ProgressBar mDisplayVoiceProgressBar;
private TextView mDisplayVoiceTime;
private Button mDisplayLocation;
private Button mDisplayBottomPhoto;
private Button mDisplayBottomAt;
private Button mDisplayBottomFace;
private Button mDisplayBottomLocation;
private Button mDisplayBottomCompetence;
private Button mRecord;
private RelativeLayout mRecordLayout;
private ImageView mRecordVolume;
private ImageView mRecordLight_1;
private ImageView mRecordLight_2;
private ImageView mRecordLight_3;
private TextView mRecordTime;
private ProgressBar mRecordProgressBar;
private Animation mRecordLight_1_Animation;
private Animation mRecordLight_2_Animation;
private Animation mRecordLight_3_Animation;
private MediaPlayer mMediaPlayer;
private RecordUtil mRecordUtil;
private static final int MAX_TIME = 60;// 最长录音时间
private static final int MIN_TIME = 2;// 最短录音时间
private static final int RECORD_NO = 0; // 不在录音
private static final int RECORD_ING = 1; // 正在录音
private static final int RECORD_ED = 2; // 完成录音
private int mRecord_State = 0; // 录音的状态
private float mRecord_Time;// 录音的时间
private double mRecord_Volume;// 麦克风获取的音量值
private boolean mPlayState; // 播放状态
private int mPlayCurrentPosition;// 当前播放的时间
private static final String PATH = "/sdcard/KaiXin/Record/";// 录音存储路径
private String mRecordPath;// 录音的存储名称
private int mMAXVolume;// 最大音量高度
private int mMINVolume;// 最小音量高度
private int mLocationPosition;// 当前选择的地理位置在列表的位置
private boolean mLocationIsShowing = true;// 当前是否显示地理位置
private String[] mCompetenceItems = new String[] { "任何人可见", "好友的好友",
"仅好友可见", "仅自己可见" };// 权限名称
private int mCompetencePosition;// 当前选择的权限在列表中的位置
private Bitmap mPhotoBitmap;// 上传的图片
private String mPhotoPath;// 上传的图片路径
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voice_activity);
findViewById();
setListener();
init();
}
private void findViewById() {
mParent = (LinearLayout) findViewById(R.id.voice_parent);
mCancel = (Button) findViewById(R.id.voice_cancel);
mDetermine = (Button) findViewById(R.id.voice_determine);
mContent = (EditText) findViewById(R.id.voice_content);
mPhoto = (ImageView) findViewById(R.id.voice_photo);
mDisplayVoiceLayout = (LinearLayout) findViewById(R.id.voice_display_voice_layout);
mDisplayVoicePlay = (ImageView) findViewById(R.id.voice_display_voice_play);
mDisplayVoiceProgressBar = (ProgressBar) findViewById(R.id.voice_display_voice_progressbar);
mDisplayVoiceTime = (TextView) findViewById(R.id.voice_display_voice_time);
mDisplayLocation = (Button) findViewById(R.id.voice_display_location);
mDisplayBottomPhoto = (Button) findViewById(R.id.voice_display_bottom_photo);
mDisplayBottomAt = (Button) findViewById(R.id.voice_display_bottom_at);
mDisplayBottomFace = (Button) findViewById(R.id.voice_display_bottom_face);
mDisplayBottomLocation = (Button) findViewById(R.id.voice_display_bottom_location);
mDisplayBottomCompetence = (Button) findViewById(R.id.voice_display_bottom_competence);
mRecord = (Button) findViewById(R.id.voice_record_btn);
mRecordLayout = (RelativeLayout) findViewById(R.id.voice_record_layout);
mRecordVolume = (ImageView) findViewById(R.id.voice_recording_volume);
mRecordLight_1 = (ImageView) findViewById(R.id.voice_recordinglight_1);
mRecordLight_2 = (ImageView) findViewById(R.id.voice_recordinglight_2);
mRecordLight_3 = (ImageView) findViewById(R.id.voice_recordinglight_3);
mRecordTime = (TextView) findViewById(R.id.voice_record_time);
mRecordProgressBar = (ProgressBar) findViewById(R.id.voice_record_progressbar);
}
private void setListener() {
mCancel.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭当前界面
finish();
}
});
mDetermine.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭当前界面并提示消息
Toast.makeText(VoiceActivity.this, "发布成功", Toast.LENGTH_SHORT)
.show();
finish();
}
});
mRecord.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
// 开始录音
case MotionEvent.ACTION_DOWN:
if (mRecord_State != RECORD_ING) {
// 开始动画效果
startRecordLightAnimation();
// 修改录音状态
mRecord_State = RECORD_ING;
// 设置录音保存路径
mRecordPath = PATH + UUID.randomUUID().toString()
+ ".amr";
// 实例化录音工具类
mRecordUtil = new RecordUtil(mRecordPath);
try {
// 开始录音
mRecordUtil.start();
} catch (IOException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
public void run() {
// 初始化录音时间
mRecord_Time = 0;
while (mRecord_State == RECORD_ING) {
// 大于最大录音时间则停止录音
if (mRecord_Time >= MAX_TIME) {
mRecordHandler.sendEmptyMessage(0);
} else {
try {
// 每隔200毫秒就获取声音音量并更新界面显示
Thread.sleep(200);
mRecord_Time += 0.2;
if (mRecord_State == RECORD_ING) {
mRecord_Volume = mRecordUtil
.getAmplitude();
mRecordHandler
.sendEmptyMessage(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}).start();
}
break;
// 停止录音
case MotionEvent.ACTION_UP:
if (mRecord_State == RECORD_ING) {
// 停止动画效果
stopRecordLightAnimation();
// 修改录音状态
mRecord_State = RECORD_ED;
try {
// 停止录音
mRecordUtil.stop();
// 初始录音音量
mRecord_Volume = 0;
} catch (IOException e) {
e.printStackTrace();
}
// 如果录音时间小于最短时间
if (mRecord_Time <= MIN_TIME) {
// 显示提醒
Toast.makeText(VoiceActivity.this, "录音时间过短",
Toast.LENGTH_SHORT).show();
// 修改录音状态
mRecord_State = RECORD_NO;
// 修改录音时间
mRecord_Time = 0;
// 修改显示界面
mRecordTime.setText("0″");
mRecordProgressBar.setProgress(0);
// 修改录音声音界面
ViewGroup.LayoutParams params = mRecordVolume
.getLayoutParams();
params.height = 0;
mRecordVolume.setLayoutParams(params);
} else {
// 录音成功,则显示录音成功后的界面
mRecordLayout.setVisibility(View.GONE);
mRecord.setVisibility(View.GONE);
mDisplayVoiceLayout.setVisibility(View.VISIBLE);
mDisplayLocation.setVisibility(View.VISIBLE);
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_play);
mDisplayVoiceProgressBar.setMax((int) mRecord_Time);
mDisplayVoiceProgressBar.setProgress(0);
mDisplayVoiceTime.setText((int) mRecord_Time + "″");
}
}
break;
}
return false;
}
});
mDisplayVoicePlay.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 播放录音
if (!mPlayState) {
mMediaPlayer = new MediaPlayer();
try {
// 添加录音的路径
mMediaPlayer.setDataSource(mRecordPath);
// 准备
mMediaPlayer.prepare();
// 播放
mMediaPlayer.start();
// 根据时间修改界面
new Thread(new Runnable() {
public void run() {
mDisplayVoiceProgressBar
.setMax((int) mRecord_Time);
mPlayCurrentPosition = 0;
while (mMediaPlayer.isPlaying()) {
mPlayCurrentPosition = mMediaPlayer
.getCurrentPosition() / 1000;
mDisplayVoiceProgressBar
.setProgress(mPlayCurrentPosition);
}
}
}).start();
// 修改播放状态
mPlayState = true;
// 修改播放图标
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_stop);
mMediaPlayer
.setOnCompletionListener(new OnCompletionListener() {
// 播放结束后调用
public void onCompletion(MediaPlayer mp) {
// 停止播放
mMediaPlayer.stop();
// 修改播放状态
mPlayState = false;
// 修改播放图标
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_play);
// 初始化播放数据
mPlayCurrentPosition = 0;
mDisplayVoiceProgressBar
.setProgress(mPlayCurrentPosition);
}
});
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
if (mMediaPlayer != null) {
// 根据播放状态修改显示内容
if (mMediaPlayer.isPlaying()) {
mPlayState = false;
mMediaPlayer.stop();
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_play);
mPlayCurrentPosition = 0;
mDisplayVoiceProgressBar
.setProgress(mPlayCurrentPosition);
} else {
mPlayState = false;
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_play);
mPlayCurrentPosition = 0;
mDisplayVoiceProgressBar
.setProgress(mPlayCurrentPosition);
}
}
}
}
});
mPhoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 跳转到删除图片
Intent intent = new Intent();
intent.setClass(VoiceActivity.this, DeletePhotoActivity.class);
intent.putExtra("path", mPhotoPath);
startActivityForResult(intent,
ActivityForResultUtil.REQUESTCODE_VOICE_DELETE_PHOTO);
}
});
mDisplayLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 地理位置对话框
locationDialog();
}
});
mDisplayBottomPhoto.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 图片对话框
PhotoDialog();
}
});
mDisplayBottomAt.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(VoiceActivity.this, "暂时不支持@功能",
Toast.LENGTH_SHORT).show();
}
});
mDisplayBottomFace.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 显示表情对话框
showFace(mParent);
}
});
mFaceGridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 获取当前光标所在位置
int currentPosition = mContent.getSelectionStart();
// 添加含有表情的文本
mContent.setText(new TextUtil(mKXApplication).replace(mContent
.getText().insert(currentPosition,
mKXApplication.mFacesText.get(position))));
// 关闭表情对话框
dismissFace();
}
});
mFaceClose.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 关闭表情对话框
dismissFace();
}
});
mDisplayBottomLocation.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 根据显示状态隐藏或者显示
if (mLocationIsShowing) {
mLocationIsShowing = false;
mDisplayLocation.setVisibility(View.GONE);
} else {
mLocationIsShowing = true;
mDisplayLocation.setVisibility(View.VISIBLE);
}
}
});
mDisplayBottomCompetence.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 权限对话框
CompetenceDialog();
}
});
}
private void init() {
// 设置当前的最小声音和最大声音值
mMINVolume = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 4.5f, getResources()
.getDisplayMetrics());
mMAXVolume = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 65f, getResources()
.getDisplayMetrics());
// 获取地理位置数据
getLocation();
// 显示内容
mDisplayLocation.setText(mKXApplication.mMyLocationResults.get(0)
.getName());
mDisplayBottomCompetence.setText(mCompetenceItems[mCompetencePosition]);
}
/**
* 获取地理位置数据
*/
private void getLocation() {
if (mKXApplication.mMyLocationResults.isEmpty()) {
InputStream inputStream;
try {
inputStream = getAssets().open("data/my_location.KX");
String json = new TextUtil(mKXApplication)
.readTextFile(inputStream);
JSONArray array = new JSONArray(json);
LocationResult result = null;
for (int i = 0; i < array.length(); i++) {
result = new LocationResult();
result.setName(array.getJSONObject(i).getString("name"));
result.setLocation(array.getJSONObject(i).getString(
"location"));
mKXApplication.mMyLocationResults.add(result);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 用来控制动画效果
*/
Handler mRecordLightHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
if (mRecord_State == RECORD_ING) {
mRecordLight_1.setVisibility(View.VISIBLE);
mRecordLight_1_Animation = AnimationUtils.loadAnimation(
VoiceActivity.this, R.anim.voice_anim);
mRecordLight_1.setAnimation(mRecordLight_1_Animation);
mRecordLight_1_Animation.startNow();
}
break;
case 1:
if (mRecord_State == RECORD_ING) {
mRecordLight_2.setVisibility(View.VISIBLE);
mRecordLight_2_Animation = AnimationUtils.loadAnimation(
VoiceActivity.this, R.anim.voice_anim);
mRecordLight_2.setAnimation(mRecordLight_2_Animation);
mRecordLight_2_Animation.startNow();
}
break;
case 2:
if (mRecord_State == RECORD_ING) {
mRecordLight_3.setVisibility(View.VISIBLE);
mRecordLight_3_Animation = AnimationUtils.loadAnimation(
VoiceActivity.this, R.anim.voice_anim);
mRecordLight_3.setAnimation(mRecordLight_3_Animation);
mRecordLight_3_Animation.startNow();
}
break;
case 3:
if (mRecordLight_1_Animation != null) {
mRecordLight_1.clearAnimation();
mRecordLight_1_Animation.cancel();
mRecordLight_1.setVisibility(View.GONE);
}
if (mRecordLight_2_Animation != null) {
mRecordLight_2.clearAnimation();
mRecordLight_2_Animation.cancel();
mRecordLight_2.setVisibility(View.GONE);
}
if (mRecordLight_3_Animation != null) {
mRecordLight_3.clearAnimation();
mRecordLight_3_Animation.cancel();
mRecordLight_3.setVisibility(View.GONE);
}
break;
}
}
};
/**
* 用来控制录音
*/
Handler mRecordHandler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
if (mRecord_State == RECORD_ING) {
// 停止动画效果
stopRecordLightAnimation();
// 修改录音状态
mRecord_State = RECORD_ED;
try {
// 停止录音
mRecordUtil.stop();
// 初始化录音音量
mRecord_Volume = 0;
} catch (IOException e) {
e.printStackTrace();
}
// 根据录音修改界面显示内容
mRecordLayout.setVisibility(View.GONE);
mRecord.setVisibility(View.GONE);
mDisplayVoiceLayout.setVisibility(View.VISIBLE);
mDisplayLocation.setVisibility(View.VISIBLE);
mDisplayVoicePlay
.setImageResource(R.drawable.globle_player_btn_play);
mDisplayVoiceProgressBar.setMax((int) mRecord_Time);
mDisplayVoiceProgressBar.setProgress(0);
mDisplayVoiceTime.setText((int) mRecord_Time + "″");
}
break;
case 1:
// 根据录音时间显示进度条
mRecordProgressBar.setProgress((int) mRecord_Time);
// 显示录音时间
mRecordTime.setText((int) mRecord_Time + "″");
// 根据录音声音大小显示效果
ViewGroup.LayoutParams params = mRecordVolume.getLayoutParams();
if (mRecord_Volume < 200.0) {
params.height = mMINVolume;
} else if (mRecord_Volume > 200.0 && mRecord_Volume < 400) {
params.height = mMINVolume * 2;
} else if (mRecord_Volume > 400.0 && mRecord_Volume < 800) {
params.height = mMINVolume * 3;
} else if (mRecord_Volume > 800.0 && mRecord_Volume < 1600) {
params.height = mMINVolume * 4;
} else if (mRecord_Volume > 1600.0 && mRecord_Volume < 3200) {
params.height = mMINVolume * 5;
} else if (mRecord_Volume > 3200.0 && mRecord_Volume < 5000) {
params.height = mMINVolume * 6;
} else if (mRecord_Volume > 5000.0 && mRecord_Volume < 7000) {
params.height = mMINVolume * 7;
} else if (mRecord_Volume > 7000.0 && mRecord_Volume < 10000.0) {
params.height = mMINVolume * 8;
} else if (mRecord_Volume > 10000.0 && mRecord_Volume < 14000.0) {
params.height = mMINVolume * 9;
} else if (mRecord_Volume > 14000.0 && mRecord_Volume < 17000.0) {
params.height = mMINVolume * 10;
} else if (mRecord_Volume > 17000.0 && mRecord_Volume < 20000.0) {
params.height = mMINVolume * 11;
} else if (mRecord_Volume > 20000.0 && mRecord_Volume < 24000.0) {
params.height = mMINVolume * 12;
} else if (mRecord_Volume > 24000.0 && mRecord_Volume < 28000.0) {
params.height = mMINVolume * 13;
} else if (mRecord_Volume > 28000.0) {
params.height = mMAXVolume;
}
mRecordVolume.setLayoutParams(params);
break;
}
}
};
/**
* 开始动画效果
*/
private void startRecordLightAnimation() {
mRecordLightHandler.sendEmptyMessageDelayed(0, 0);
mRecordLightHandler.sendEmptyMessageDelayed(1, 1000);
mRecordLightHandler.sendEmptyMessageDelayed(2, 2000);
}
/**
* 停止动画效果
*/
private void stopRecordLightAnimation() {
mRecordLightHandler.sendEmptyMessage(3);
}
/**
* 图片对话框
*/
private void PhotoDialog() {
AlertDialog.Builder builder = new Builder(VoiceActivity.this);
builder.setTitle("插入照片");
builder.setItems(new String[] { "拍照上传", "上传手机中的照片" },
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = null;
switch (which) {
case 0:
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File dir = new File("/sdcard/KaiXin/Camera/");
if (!dir.exists()) {
dir.mkdirs();
}
mPhotoPath = "/sdcard/KaiXin/Camera/"
+ UUID.randomUUID().toString();
File file = new File(mPhotoPath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
}
}
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(file));
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA);
break;
case 1:
intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(
intent,
ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_LOCATION);
break;
}
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.create().show();
}
/**
* 地理位置对话框
*/
private void locationDialog() {
AlertDialog.Builder builder = new Builder(VoiceActivity.this);
builder.setTitle("选择当前位置");
builder.setAdapter(new LocationAdapter(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mLocationPosition = which;
mDisplayLocation
.setText(mKXApplication.mMyLocationResults.get(
which).getName());
dialog.dismiss();
}
});
builder.setPositiveButton("刷新", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
private class LocationAdapter extends BaseAdapter {
public int getCount() {
return mKXApplication.mMyLocationResults.size();
}
public Object getItem(int position) {
return mKXApplication.mMyLocationResults.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(VoiceActivity.this).inflate(
R.layout.voice_activity_location_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.voice_activity_location_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.voice_activity_location_item_name);
holder.location = (TextView) convertView
.findViewById(R.id.voice_activity_location_item_location);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
LocationResult result = mKXApplication.mMyLocationResults
.get(position);
if (mLocationPosition == position) {
holder.icon.setVisibility(View.VISIBLE);
} else {
holder.icon.setVisibility(View.INVISIBLE);
}
holder.name.setText(result.getName());
holder.location.setText(result.getLocation());
return convertView;
}
class ViewHolder {
ImageView icon;
TextView name;
TextView location;
}
}
/**
* 权限对话框
*/
private void CompetenceDialog() {
AlertDialog.Builder builder = new Builder(VoiceActivity.this);
builder.setTitle("请选择记录权限");
builder.setAdapter(new CompetenceAdapter(),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mCompetencePosition = which;
mDisplayBottomCompetence
.setText(mCompetenceItems[which]);
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
}).create().show();
}
private class CompetenceAdapter extends BaseAdapter {
public int getCount() {
return mCompetenceItems.length;
}
public Object getItem(int position) {
return mCompetenceItems[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(VoiceActivity.this).inflate(
R.layout.voice_activity_competence_item, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView
.findViewById(R.id.voice_activity_competence_item_icon);
holder.name = (TextView) convertView
.findViewById(R.id.voice_activity_competence_item_name);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (mCompetencePosition == position) {
holder.icon.setVisibility(View.VISIBLE);
} else {
holder.icon.setVisibility(View.INVISIBLE);
}
holder.name.setText(mCompetenceItems[position]);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView name;
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_CAMERA:
if (resultCode == RESULT_OK) {
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show();
return;
}
mPhotoBitmap = BitmapFactory.decodeFile(mPhotoPath);
mPhoto.setVisibility(View.VISIBLE);
mPhoto.setImageBitmap(mPhotoBitmap);
} else {
Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show();
}
break;
case ActivityForResultUtil.REQUESTCODE_UPLOADPHOTO_LOCATION:
Uri uri = null;
if (data == null) {
Toast.makeText(this, "取消上传", Toast.LENGTH_SHORT).show();
return;
}
if (resultCode == RESULT_OK) {
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Toast.makeText(this, "SD不可用", Toast.LENGTH_SHORT).show();
return;
}
uri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, proj, null, null, null);
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.getCount() > 0 && cursor.moveToFirst()) {
mPhotoPath = cursor.getString(column_index);
mPhotoBitmap = BitmapFactory.decodeFile(mPhotoPath);
mPhoto.setVisibility(View.VISIBLE);
mPhoto.setImageBitmap(mPhotoBitmap);
}
}
} else {
Toast.makeText(this, "照片获取失败", Toast.LENGTH_SHORT).show();
}
break;
case ActivityForResultUtil.REQUESTCODE_VOICE_DELETE_PHOTO:
if (resultCode == RESULT_OK) {
mPhoto.setImageDrawable(new BitmapDrawable());
mPhoto.setVisibility(View.GONE);
}
break;
}
}
}