Android Annotations官网地址:http://androidannotations.org
Android Studio配置
Project级build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Module级build.gradle
apply plugin: 'com.android.application'
apply plugin:'android-apt'
def AAVersion='4.0.0'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.android.fileuploaddemo"
minSdkVersion 8
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
}
apt {
arguments {
androidManifestFile variant.outputs[0]?.processResources?.manifestFile
resourcePackageName "com.android.fileuploaddemo"
}
}
简单Demo
package com.android.fileuploaddemo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.UiThread;
import android.util.Log;
import android.widget.Toast;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Fullscreen;
import org.androidannotations.annotations.OnActivityResult;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
@Fullscreen
@EActivity(R.layout.activity_main)
public class MainActivity extends Activity {
private static final int CAPTURE_IMAGE_REQUEST = 100;
private static final int RECORD_VIDEO_REQUEST = 200;
private static final int MEDIA_TYPE_IMAGE = 1;
private static final int MEDIA_TYPE_VIDEO = 2;
private Uri fileUri;
/**
* 拍照
*/
@Click(R.id.capture_image_btn)
void captureImage(){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputFileUri(MEDIA_TYPE_IMAGE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
startActivityForResult(intent,CAPTURE_IMAGE_REQUEST);
}
/**
* 录像
*/
@Click(R.id.record_video_btn)
void recordVideo(){
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputFileUri(MEDIA_TYPE_VIDEO);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1);
intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
startActivityForResult(intent,RECORD_VIDEO_REQUEST);
}
/**
*
* 当Activity销毁的时候,保存数据
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable("fileUri",fileUri);
}
/**
*
* 当Activity重建的时候,恢复数据
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
fileUri = savedInstanceState.getParcelable("fileUrl");
}
/**
*
* 拍照请求返回结果
*/
@OnActivityResult(CAPTURE_IMAGE_REQUEST)
void onCaptureImageResult(int resultCode){
if(resultCode == RESULT_OK){
Intent intent = new Intent(MainActivity.this,UploadActivity_.class);
intent.putExtra("filePath",fileUri.getPath());
intent.putExtra("isImage",true);
startActivity(intent);
}else if(resultCode == RESULT_CANCELED){
Toast.makeText(getApplicationContext(),"用户取消拍照",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"拍照失败",Toast.LENGTH_SHORT).show();
}
}
/**
*
* 录像请求返回结果
*/
@OnActivityResult(RECORD_VIDEO_REQUEST)
void onRecordVideoResult(int resultCode){
if(resultCode == RESULT_OK){
Intent intent = new Intent(MainActivity.this,UploadActivity_.class);
intent.putExtra("filePath",fileUri.getPath());
intent.putExtra("isImage",false);
startActivity(intent);
}else if(resultCode == RESULT_CANCELED){
Toast.makeText(getApplicationContext(),"用户取消录像",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"录像失败",Toast.LENGTH_SHORT).show();
}
}
@UiThread
private Uri getOutputFileUri(int mediaType){
File fileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"dir");
if(!fileDir.exists()){
if(!fileDir.mkdirs()){
Log.d("Message","Create Directory failed");
return null;
}
}
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
File filePath;
if(mediaType == MEDIA_TYPE_IMAGE){
filePath = new File(fileDir.getPath()+File.separator+"IMG_"+timeStamp+".jpg");
}else if(mediaType == MEDIA_TYPE_VIDEO){
filePath = new File(fileDir.getPath()+File.separator+"VID_"+timeStamp+".mp4");
}else {
return null;
}
return Uri.fromFile(filePath);
}
}