第一部分Activity中的代码
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.liying.dzdp.R;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;
import org.apache.http.Header;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import base.EduActivity;
/**
* @version 2.0
* @类描述:
* @项目名称:DZDP
* @类名称: MainActivity
* @包名称: activity
* @创建人: liying
* @创建时间:16/11/7 14:20
* @修改人:
* @修改时间:16/11/7 14:20
* @修改备注: 调用系统相机,相册,裁剪后上传服务器
*/
public class MainActivity extends EduActivity {
private Button mBtnCamera,mBtnAlbum;
public static final int CAMERA_REQUEST_CODE = 1000;
public static final int GALLERY_REQUEST_CODE = 1001;
public static final int CROP_REQUEST_CODE = 1002;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void init() {
mBtnCamera = (Button) findViewById(R.id.btn_camera);
mBtnCamera.setOnClickListener(this);
mBtnAlbum = (Button) findViewById(R.id.btn_gallery);
mBtnAlbum.setOnClickListener(this);
}
@Override
public void onClickEvent(View view) {
switch (view.getId()){
case R.id.btn_camera:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
break;
case R.id.btn_gallery:
Intent intent1 = new Intent(Intent.ACTION_GET_CONTENT);
intent1.setType("image/*");
startActivityForResult(intent1, GALLERY_REQUEST_CODE);
break;
}
}
@Override
public void setContentLayout() {
setContentView(R.layout.activity_splash);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data!=null){
switch (requestCode){
case CAMERA_REQUEST_CODE:
Bundle extras = data.getExtras();
if(extras != null)
{
Bitmap bm = extras.getParcelable("data");
Uri uri = saveBitmap(bm);
startImageZoom(uri);
}
break;
case GALLERY_REQUEST_CODE:
Uri uri;
uri = data.getData();
Uri fileUri = convertUri(uri);
startImageZoom(fileUri);
break;
case CROP_REQUEST_CODE:
Bundle extras2 = data.getExtras();
if(extras2 == null){
return;
}
Bitmap bm = extras2.getParcelable("data");
ImageView imageView = (ImageView)findViewById(R.id.iv_show);
imageView.setImageBitmap(bm);
sendImage(bm);
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}
//调用系统裁剪图片功能
private void startImageZoom(Uri uri)
{
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
//设置裁剪的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
//设置裁剪图片的大小
intent.putExtra("outputX", 150);
intent.putExtra("outputY", 150);
//是否返回数据
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_REQUEST_CODE);
}
//转换Uri格式
private Uri convertUri(Uri uri)
{
InputStream is = null;
try {
is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return saveBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//将bitmap转换成Uri
private Uri saveBitmap(Bitmap bm)
{
File tmpDir = new File(Environment.getExternalStorageDirectory() + "/com.liying.avater");
if(!tmpDir.exists())
{
//路径不存在创建路径
tmpDir.mkdir();
}
File img = new File(tmpDir.getAbsolutePath() + "avater.png");
try {
FileOutputStream fos = new FileOutputStream(img);
bm.compress(Bitmap.CompressFormat.PNG, 85, fos);
fos.flush();
fos.close();
return Uri.fromFile(img);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//向服务器发送图片 使用的是asynchttp框架
private void sendImage(Bitmap bm)
{
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 60, stream);
byte[] bytes = stream.toByteArray();
String img = new String(Base64.encodeToString(bytes, Base64.DEFAULT));
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.add("img", img);
client.post("http://192.168.56.1/ImgUpload.php", params, new AsyncHttpResponseHandler() {
//如果Header报红需要在build.gradle中Android节点添加 useLibrary 'org.apache.http.legacy'
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
Toast.makeText(MainActivity.this,"Upload Success!",Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
Toast.makeText(MainActivity.this,"Upload Fail!",Toast.LENGTH_SHORT).show();
}
});
}
}
第二部分 布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:layout_height="match_parent">
<ImageView
android:layout_width="150dp"
android:layout_height="150dp"
android:id="@+id/iv_show"
android:background="@color/colorAccent"
android:layout_marginTop="60dp"
/>
<Button
android:layout_marginTop="30dp"
android:id="@+id/btn_camera"
android:text="相机选择"
android:layout_width="100dp"
android:layout_height="50dp" />
<Button
android:layout_marginTop="10dp"
android:id="@+id/btn_gallery"
android:text="相册选择"
android:layout_width="100dp"
android:layout_height="50dp" />
</LinearLayout>
第三部分 清单文件代码
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.liying.dzdp" >
//内存卡读取权限及访问网络权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name="activity.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
第四部分 build.gradle代码
apply plugin: 'com.android.application'
android {
//Header报红请添加这一行代码
useLibrary 'org.apache.http.legacy'
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.liying.dzdp"
minSdkVersion 11
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
compile files('libs/android-async-http-1.4.6.jar')
}