基于Android的拍照上传程序开发

基于Android拍照上传程序开发

基于Android拍照上传程序开发


大家好,我是PETER(cfwdl)。写这篇文章是为了帮助以前没有没有接触过anroid或是刚刚入门并没有摸过手机的硬件设备监测、使用等功能的朋友,给大家一个我自己的写的心得和经验,我也是新手,所以大家互相交换一下经验吧。当然每个程序都会有问题,因为我不是最终用户,软件的测试工作没有好好测试过,大家凑合看看吧~!


程序介绍:
本程序主要完成一个煎蛋的android手机拍照程序(本程序的拍照功能比较简单,没有添加处理图像、手机自动对焦等功能,如果有需要的朋友可以自行参考一下相关linsteneraction的资料)
主功能:手机拍照、拍照预览、图片的存储、图片资料编辑、图像上传等功能
其他相关需求:监测手机网络状态、监测手机GPS状态、获取GPS位置、获取基站位置等。


 

需求分析:

(
程序流程)
正如上图所示,我大致的画了一下这个程序的简单的工作流程。
那么,各位看官们,现在开始我们的程序开发之旅吧。


程序设计:

PS:
本人不是美工,所以界面肯定灰常粗糙,不过不影响我们展示功能~!大家权且凑合继续看


主界面(camera_surface.xml)

本界面使用AbsoluteLayout布局来设计该界面,
下面的代码中我定义了一个全屏的SurfaceView用来在我们进入程序的第一个界面(就是拍照界面),
一个IDnowLocalityTextView,来动态的刷新用户手机当前获取到的位置信息。
三个Button 分别是:拍照、上传、退出这个大概不用我再啰嗦了。

<?xmlversion="1.0"encoding="utf-8"?>

<AbsoluteLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent" 

android:layout_height="fill_parent" 

android:orientation="horizontal">

<SurfaceViewandroid:id="@+id/surface_camera" 

android:layout_width="fill_parent" 

android:layout_height="fill_parent" 

android:layout_weight="1">  

</SurfaceView>

<TextView 

android:id="@+id/nowLocality"

android:layout_x="10px"

android:layout_y="25px"

android:textColor="@color/red"

android:textSize="14px"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="正在获取当前位置"

/>

<Buttonandroid:text="拍照"

android:layout_x="360px"

android:layout_y="20px"

android:drawableLeft="@drawable/ic_menu_camera"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/paizhao"

/>

<Buttonandroid:text="上传"

android:drawableLeft="@drawable/ic_menu_upload_mini"

android:textSize="16px"

android:layout_x="360px"

android:layout_y="70px"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/uploadPhoto"

/> 

<Buttonandroid:text="退出"

android:textSize="16px"

android:drawableLeft="@drawable/ic_menu_revert_mini"

android:layout_x="360px"

android:layout_y="120px"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/exitPro"/>

</AbsoluteLayout>

 

 

对应本界面的程序代码(MainPage.java)
程序的相关部分我都已经添加了注释,大概的功能各位应该都可以看明白,流程就是按onCreate()里的顺序执行下来。

packagecom.bjwmt.camera;

importjava.io.BufferedOutputStream;

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.text.SimpleDateFormat;

importjava.util.Date;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.app.Dialog;

importandroid.app.ProgressDialog;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.DialogInterface;

importandroid.content.Intent;

importandroid.content.pm.ActivityInfo;

importandroid.database.Cursor;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.PixelFormat;

importandroid.hardware.Camera;

importandroid.hardware.Camera.AutoFocusCallback;

importandroid.hardware.Camera.PictureCallback;

importandroid.hardware.Camera.ShutterCallback;

importandroid.location.Criteria;

importandroid.location.Location;

importandroid.location.LocationListener;

importandroid.location.LocationManager;

importandroid.net.ConnectivityManager;

importandroid.net.NetworkInfo;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Looper;

importandroid.os.Message;

importandroid.telephony.TelephonyManager;

importandroid.text.Html;

importandroid.util.Log;

importandroid.view.KeyEvent;

importandroid.view.Menu;

importandroid.view.MenuItem;

importandroid.view.SurfaceHolder;

importandroid.view.SurfaceView;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.TextView;

publicclassMainPageextendsActivity implementsSurfaceHolder.Callback,

OnClickListener{

/**

* 程序存放的图片路径是在/sdcard/fatalityUpload这个文件夹

*/

privateSurfaceViewmSurfaceView;

privateCameramCamera;

privateSurfaceHoldermSurfaceHolder;

privatebooleanmPreviewRunning;

privateTextViewnowLocality;

privateButtonexitButton;

privateButtonuploadButton;

privateButtonpaizhaoButton;

// 实例化一个TelephonyManager 创建android的电话管理

privateTelephonyManagertm;

privateDatetoday;

privateSimpleDateFormatsdf = newSimpleDateFormat("yyyyMMddhhmmss");

privateStringfileName;

privateStringlat = "", lng = "";// 经度和纬度

privateStringlatLongString;

privateGpsThreadgpsThread;

privateDBHelperdbHelper;

privateCursorcursor;

/**

* 本界面的主函数

*/

@Override

publicvoidonCreate(BundlesavedInstanceState) {

checkMysoftStage();

super.onCreate(savedInstanceState);

setContentView(R.layout.camera_surface);

// 摄像头界面将通过全屏显示,没有"标题(title)";

getWindow().setFormat(PixelFormat.TRANSLUCENT);

//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

//WindowManager.LayoutParams.FLAG_FULLSCREEN);// 全屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏

this.initMyCamera();

}

/**

* 检查一下手机设备各项硬件的开启状态

*/

publicvoidcheckMysoftStage(){

/*

* 先看手机是否已插入sd卡 然后判断sd卡里是不是已经创建了fatalityUpload文件夹用来存储本程序拍下来的照片

* 如果没有创建的话就重新在sdcard里创建fatalityUpload文件夹

*/

if(existSDcard()) { //判断手机SD卡是否存在

if (newFile("/sdcard").canRead()) {

File file = newFile("sdcard/fatalityUpload");

if(!file.exists()) {

file.mkdir();

file = newFile("sdcard/fatalityUpload/Thumbnail_fatality");

file.mkdir();

file = newFile("sdcard/fatalityUpload/fatality");

file.mkdir();

}

}

} else {

newAlertDialog.Builder(this).setMessage("检查到没有存储卡,请插入手机存储卡再开启本应用")

.setPositiveButton("确定",

newDialogInterface.OnClickListener() {

public void onClick(

DialogInterfacedialoginterface, int i) {

finish();

}

}).show();

}

/*

* 此处开始初始化数据库

try{  

dbHelper = newDBHelper(this);

            dbHelper.open(this);

            cursor= dbHelper.loadAll();

            if(!(cursor!=null&& cursor.getCount()>0)){

             dbHelper.initData();

            }

            cursor.close();

            dbHelper.close();

        }catch (Exception e) {  

            Log.d("savedata", "save data fail");  

        }finally {  

            this.dbHelper.close();  

        }  

*/

ConnectivityManagerconnectivityManager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);  

        NetworkInfonetworkinfo = connectivityManager.getActiveNetworkInfo();  

        if(networkinfo == null || !networkinfo.isAvailable()) {  // 当前网络不可用

         newAlertDialog.Builder(MainPage.this)

            .setMessage("检查到没有可用的网络连接,请打开网络连接")

            .setPositiveButton("确定",

             newDialogInterface.OnClickListener(){

                    publicvoid onClick(DialogInterface dialoginterface, int i){

                     ComponentNamecn = newComponentName("com.android.settings","com.android.settings.Settings");

Intent intent =new Intent();

intent.setComponent(cn);

intent.setAction("android.intent.action.VIEW");

startActivity(intent);

//                    finish();

                    }

             }

            ).show();

     }

}

/**

* 初始化组件

*/

public voidinitMyCamera() {

setListensers();

//TelephonyManager是android的电源通讯的帮助类,通过实例化TelephonyManager来实现操作类似获取本机

// IME码,手机号等信息

tm =(TelephonyManager) this

.getSystemService(Context.TELEPHONY_SERVICE);

// 初始化拍摄模块

mSurfaceView =(SurfaceView) findViewById(R.id.surface_camera);

//mSurfaceView.setOnClickListener(this);  

mSurfaceHolder =mSurfaceView.getHolder();

mSurfaceHolder.addCallback(MainPage.this);

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

gpsThread = newGpsThread();

gpsThread.start();

// 设置监听器,自动更新的最小时间为间隔1秒,最小位移变化超过3米

//mLocationManager.requestLocationUpdates(provider, 1000, 3,

//locationListener);

}

/**

* 此函数负责两个工作 1.实例化屏幕上的按钮 2.为按钮添加Listener

*/

private voidsetListensers() {

nowLocality =(TextView) findViewById(R.id.nowLocality);

exitButton =(Button) findViewById(R.id.exitPro);

uploadButton =(Button) findViewById(R.id.uploadPhoto);

paizhaoButton =(Button) findViewById(R.id.paizhao);

exitButton.setOnClickListener(clickExitButton);

uploadButton.setOnClickListener(clickUploadButton);

paizhaoButton.setOnClickListener(clickShootButton);

}

/**

* 当预览界面的格式和大小发生改变时,该方法被调用

*/

public voidsurfaceChanged(SurfaceHolder holder, int format, int w, int h) {

if(mPreviewRunning) {

mCamera.stopPreview();

}

Camera.Parametersp = mCamera.getParameters();

p.setPreviewSize(w,h);

mCamera.setParameters(p);

try {

mCamera.setPreviewDisplay(holder);

} catch(IOException e) {

e.printStackTrace();

}

mCamera.startPreview();

mPreviewRunning= true;

}

/**

* 重点函数 此处实例化了本界面的PictureCallback

* 当用户拍完一张照片的时候触发onPictureTaken,这时候对拍下的照片进行相应的处理操作

*/

PictureCallbackmPictureCallback = new PictureCallback() {

public voidonPictureTaken(byte[] data, Camera camera) {

if (data !=null) {

try {

today = newDate();

// 定义fileName 用来设定拍照后的文件名

// 结构: IMSI号 + 经度+ & + 纬度+ 格式化后的当前时间 (本来结构应该是 手机号 + 精度&纬度 + 格式化后的当前时间)但是因为手机号有获取不到的情况,所以换为了IMSI号

fileName =tm.getDeviceId() + "-" + lat + "-" + lng

+ "-"+ sdf.format(today); //tm.getLine1Number()获取手机号,这里直接是获取不到的,需要运营商的API解析

Bitmap bm =BitmapFactory.decodeByteArray(data, 0,

data.length);

BufferedOutputStreambos = new BufferedOutputStream(

newFileOutputStream(String.format(

"sdcard/fatalityUpload/fatality/"

+ fileName +".jpg", System

.currentTimeMillis())));

bm.compress(Bitmap.CompressFormat.JPEG,60, bos);

bos.flush();

bos.close();

BufferedOutputStreambos1 = new BufferedOutputStream(

newFileOutputStream(String.format(

"sdcard/fatalityUpload/Thumbnail_fatality/"

+ fileName +".jpg", System

.currentTimeMillis())));

Bitmap bm1 =Bitmap.createScaledBitmap(bm, 100, 100, false);

bm1.compress(Bitmap.CompressFormat.JPEG,100, bos1);

bos1.flush();

bos1.close();

removeDialog(0);

//ByteArrayOutputStream baos = new ByteArrayOutputStream();

//bm.compress(Bitmap.CompressFormat.PNG, 30, baos);

// byte[]newData = baos.toByteArray();

// 然后传递图片信息到 图像预览界面

Intent intent =new Intent();

Bundle bundle =new Bundle();

//bundle.putByteArray("picPre", newData);

bundle.putString("picPath",

"/sdcard/fatalityUpload/fatality/"+ fileName

+".jpg");

//intent.putExtra("picPre", data);

intent.putExtras(bundle);

intent.setClass(MainPage.this,PhotoPreview.class);

// if(mLocationManager != null) {

//mLocationManager.removeUpdates(locationListener);

// }

if(!gpsThread.isInterrupted()){

gpsThread.stopGspListener();

gpsThread.interrupt();

}

finish();

startActivity(intent);

} catch(FileNotFoundException e) {

e.printStackTrace();

} catch(IOException e) {

e.printStackTrace();

}

}

}

};

/**

* 创建Camera对象函数 初次实例化,界面打开时该方法自动调用

*/

public voidsurfaceCreated(SurfaceHolder holder) {

// ThreadopenCameraThread = new Thread(

// newRunnable() {

// public voidrun() {

// mCamera =Camera.open();

// }

// }

// ).start();

mCamera =Camera.open();// “打开”摄像头

}

/**

* 当用户进行 点击 操作的时候触发此事件,不过貌似没有起作用,有待测试

*/

public voidonClick(View v) {

mCamera.takePicture(mShutterCallback,null, mPictureCallback);

}

/**

* 在相机快门关闭时候的回调接口,通过这个接口来通知用户快门关闭的事件,

* 普通相机在快门关闭的时候都会发出响声,根据需要可以在该回调接口中定义各种动作, 例如:使设备震动

*/

ShutterCallbackmShutterCallback = new ShutterCallback() {

public voidonShutter() {

// just log ,donothing

Log.d("ShutterCallback","...onShutter...");

}

};

//PictureCallback rowCallback = new PictureCallback(){

// public voidonPictureTaken(byte[] data, Camera camera) {

//

// }

// };

/**

* 销毁函数 当预览界面被关闭时,该方法被调用

*/

public voidsurfaceDestroyed(SurfaceHolder holder) {

mCamera.stopPreview();

mPreviewRunning= false;

mCamera.release();

mCamera = null;

}

/*

* 点击屏幕上的"退出"键时触发该Listener监听此按钮的动作

*/

privateOnClickListener clickExitButton = new OnClickListener() {

public voidonClick(View v) {

new AlertDialog.Builder(MainPage.this).setTitle("提示").setMessage(

"确定退出?").setPositiveButton("确定",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

// if(mLocationManager != null) {

//mLocationManager

//.removeUpdates(locationListener);

// }

if(!gpsThread.isInterrupted()){

gpsThread.stopGspListener();

gpsThread.interrupt();

}

finish();

}

}).setNegativeButton("取消",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

// 取消按钮事件

}

}).show();

}

};

/*

* 点击屏幕上的"上传"键时触发该Listener监听此按钮的动作

*/

privateOnClickListener clickUploadButton = new OnClickListener() {

public voidonClick(View v) {

Intent intent =new Intent();

intent.setClass(MainPage.this,PictrueView.class);// PhotoView

// if(mLocationManager != null) {

//mLocationManager.removeUpdates(locationListener);

// }

if(!gpsThread.isInterrupted()){

gpsThread.stopGspListener();

gpsThread.interrupt();

}

finish();

startActivity(intent);

}

};

/*

* 点击屏幕上的"拍照"键时触发该Listener监听此按钮的动作

*/

privateOnClickListener clickShootButton = new OnClickListener() {

public voidonClick(View v) {

showDialog(0);

mCamera.takePicture(mShutterCallback,null, mPictureCallback);

}

};

// 声明三个menu键带出来的按钮

public staticfinal int ITEM_1_ID = Menu.FIRST;

public staticfinal int ITEM_2_ID = Menu.FIRST + 1;

public staticfinal int ITEM_3_ID = Menu.FIRST + 2;

// 初始化Menu菜单,用户按下menu键时自动触发

public booleanonCreateOptionsMenu(Menu menu) {

super.onCreateOptionsMenu(menu);

menu.add(0,ITEM_1_ID, 0, "设置");

menu.add(0,ITEM_2_ID, 1, "关于");

menu.add(0,ITEM_3_ID, 2, "退出");

return true;

}

/**

* 处理用户按下menu键时的操作

*/

public booleanonOptionsItemSelected(MenuItem item) {

switch(item.getItemId()) {

case 1: // 调出系统设置界面

ComponentName cn= new ComponentName("com.android.settings",

"com.android.settings.Settings");

Intent intent =new Intent();

intent.setComponent(cn);

intent.setAction("android.intent.action.VIEW");

startActivity(intent);

return true;

case 2: // 关于

showDialog(1);

return true;

case 3: // 退出

newAlertDialog.Builder(this).setTitle("提示").setMessage("确定退出?")

.setPositiveButton("确定",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

setResult(RESULT_OK);//确定按钮事件

// if(mLocationManager != null) {

//mLocationManager

//.removeUpdates(locationListener);

// }

if(!gpsThread.isInterrupted()){

gpsThread.stopGspListener();

gpsThread.interrupt();

}

finish();

}

}).setNegativeButton("取消",

new DialogInterface.OnClickListener(){

public voidonClick(DialogInterface dialog,

int whichButton){

// 取消按钮事件

}

}).show();

return true;

}

return false;

}

/**

* 当用户按下手机实体按键时触发 如果按下的是拍照键的话返回一个true,其他都是false

*/

@Override

public booleanonKeyDown(int keyCode, KeyEvent event) {

if (keyCode ==KeyEvent.KEYCODE_CAMERA) {

returnsuper.onKeyDown(keyCode, event);

} else

return false;

}

/**

* 判断存储卡是否存在

* @return

*/

public booleanexistSDcard() {

if(android.os.Environment.getExternalStorageState().equals(

android.os.Environment.MEDIA_MOUNTED)){

return true;

} else

return false;

}

/**

* 相机自动对焦函数

*/

AutoFocusCallbackautoFocusCallback = new AutoFocusCallback() {

public voidonAutoFocus(boolean success, Camera camera) {

}

};

@Override

protected DialogonCreateDialog(int id) {

switch (id) {

case 1: {

return newAlertDialog.Builder(MainPage.this)

.setIcon(R.drawable.ic_menu_info_details)

.setTitle("关于拍照上传软件")

.setMessage(

Html.fromHtml("<fontcolor=#E43E07 >程序功能介绍:</font><p>本程序用于图片拍摄及上传图片等功能</p>"

+ "<fontcolor=#E43E07 >注意:</font><p>使用本程序前,请先开启用户手机的GPS及无线网络。(拍照界面中点击 menu键->设置->安全与位置/无限网络 开启GPS及无限网络)</p>"

+ "<palign=center color=#767676 size=12px>PETER制作 版权所有</p>"))

.setPositiveButton("确定",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

removeDialog(1);

}

}).create();

}

case 0: {

ProgressDialogdialog = new ProgressDialog(this);

dialog.setMessage("处理中,请稍后...");

dialog.setIndeterminate(true);

dialog.setCancelable(true);

return dialog;

}

}

return null;

}

HandlermyHandler = new Handler() {  

        publicvoid handleMessage(Message msg) {   

             switch(msg.what) {   

             case0:   

             Bundlebundle = msg.getData();

//            Log.d("Thread Test","<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<handlerget message"+msg.what);

             lat= bundle.getString("lat");

             lng= bundle.getString("lng");

             latLongString= bundle.getString("latLongString");

//            Log.d("handler Text","<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"+latLongString+"lat:"+lat+" lng:"+lng);

             nowLocality.setText(System.currentTimeMillis()+ ":\n" + latLongString);

             break;   

             case1:

             AlertDialogdialog1 = new AlertDialog.Builder(MainPage.this)

.setTitle("提示").setMessage(

"检测到GPS/A-GPS没有开启\n 点击 确定 进入系统设置,点击 取消 结束").setPositiveButton("Ok",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

/*

* 转到设置界面

*/

Intent fireAlarm= new Intent(

"android.settings.LOCATION_SOURCE_SETTINGS");

fireAlarm

.addCategory(Intent.CATEGORY_DEFAULT);

startActivity(fireAlarm);

}

}).setNegativeButton("取消",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

if(!gpsThread.isInterrupted()){

gpsThread.stopGspListener();

gpsThread.interrupt();

}

finish();

}

}).create();

dialog1.show();

break;

             case2:

             AlertDialogdialog2 = new AlertDialog.Builder(MainPage.this)

.setTitle("提示").setMessage("无法获得当前位置,稍后将会重试")

.setPositiveButton("Ok",

newDialogInterface.OnClickListener() {

public voidonClick(DialogInterface dialog,

int whichButton){

// finish();

}

}).create();

dialog2.show();

break;

             }   

             super.handleMessage(msg);   

        }   

};  

/**

* 手机的GPS线程

* @author peter

*/

class GpsThreadextends Thread implements Runnable {

        privateLooper mLooper;

privateLocationManager mLocationManager;

private Locationlocation;

private Messagemessage;

private longpreTime;

StringlatLongStr = "",latitude = "",longitude = "";

public LoopergetLooper() {

            returnmLooper;

        }

public voidquit() {

            mLooper.quit();

        }

private voidupdateWithNewLocation(Location slocation) {

     if(slocation != null) {

     latitude= Double.toString(slocation.getLatitude());

     longitude= Double.toString(slocation.getLongitude());

     longsubTime = (System.currentTimeMillis() - preTime) / 1000;

     floatv = (subTime == 0 || location == null) ? 0 : (location

     .distanceTo(slocation)/ subTime);

     latLongStr= "纬度:" + latitude +"\n经度:" + longitude + "\n速度:" + v

     +" m/s , " + v * 3.6 + " km/h";

     location= slocation;

     preTime= System.currentTimeMillis();

     }else {

     latLongStr= "无法获取地理信息";

     }

     }

privateLocationListener locationListener = new LocationListener() {

// 底层获得的位置会通过这个接口上报给应用

public voidonLocationChanged(Location location) {

message.what =0;

updateWithNewLocation(location);

//Log.d("Thread Test", "*************************GPS ISOPEN!");

}

// Provider被disable时触发此函数,比如GPS被关闭

public voidonProviderDisabled(String provider) {

message.what =1;

//Log.d("Thread Test", "*************************GPS IS CLOSED!");

}

// Provider被enable时触发此函数,比如GPS被打开

public voidonProviderEnabled(String provider) {

}

/*

* 位置服务状态的变化通过这个接口上报

* Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数

*/

publicvoidonStatusChanged(Stringprovider, intstatus, Bundle extras) {

message.what =2;

}

};

@SuppressWarnings("static-access")

publicvoidrun(){

Looper.prepare();

mLooper =Looper.myLooper();

// 此处实例化了 手机的本地位置服务 的一个对象

mLocationManager= (LocationManager) getSystemService(Context.LOCATION_SERVICE);

Criteriacriteria = newCriteria();

     criteria.setAccuracy(Criteria.ACCURACY_FINE);//设置为最大精度

     criteria.setAltitudeRequired(false);//不要求海拔信息

     criteria.setBearingRequired(false);//不要求方位信息

     criteria.setCostAllowed(true);//是否允许付费

     criteria.setPowerRequirement(Criteria.POWER_LOW);//对电量的要求

     Stringprovider = mLocationManager.getBestProvider(criteria, true);

     while(!Thread.currentThread().isInterrupted()){

     mLocationManager.requestLocationUpdates(provider,1000, 1, locationListener);

     location= mLocationManager.getLastKnownLocation(provider);

//    updateWithNewLocation(location); // 更新位置

         while(location== null){

         preTime= System.currentTimeMillis();

         //刷新Provider信息

         mLocationManager.requestLocationUpdates(provider,1000, 1, locationListener);

            //获得最新的位置数据

         location= mLocationManager.getLastKnownLocation(provider);

         updateWithNewLocation(location);// 更新位置

         try{

     Thread.sleep(1000);

     }catch(InterruptedException e) {

     e.printStackTrace();

     }

         }

try{

message = newMessage();

updateWithNewLocation(location);// 更新位置

Thread.sleep(4000);

} catch(InterruptedExceptione) {

e.printStackTrace();

}

//Log.d("Thread Test", "*************************Message.what'sValue is:"+message.what);

             Bundledata = newBundle();

             data.putString("latLongString",latLongStr);

             data.putString("lat",latitude);

             data.putString("lng",longitude);

             message.setData(data);

             myHandler.sendMessage(message); 

     }   

     Looper.loop();

}

publicvoidstopGspListener(){

if(mLocationManager!=null){

mLocationManager.removeUpdates(locationListener);

}

}

};

}

 

 

图像预览界面(photo_preview.xml):

当用户在主界面点击拍照后进入本界面,界面内容
一个ImageView展示刚刚用户拍下来的照片,
两个button“保存放弃

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="horizontal"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

    <TableLayoutandroid:layout_width="fill_parent"

android:layout_height="fill_parent" 

android:stretchColumns="*"

android:background="@color/white"

>

<TableRow>

<ImageView 

android:id="@+id/previewPic"

    android:layout_width="wrap_content"

    android:layout_height="235px"

   />

   <!-- 

    android:src="@drawable/javamylife"

    -->

</TableRow>

   <TableRow>

    <TableLayoutandroid:layout_width="fill_parent"

android:layout_height="wrap_content" 

android:stretchColumns="*"

android:background="@color/white"

>

<TableRow>

<Button 

    android:id="@+id/returnShoot"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:drawableLeft="@drawable/ic_menu_revert_mini"

    android:gravity="center"

    android:text="放弃"

   />

   <Button 

    android:id="@+id/savePicture"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:drawableLeft="@drawable/ic_menu_save"

    android:gravity="center"

    android:text="保存"

   />

</TableRow>

</TableLayout>

   </TableRow>

</TableLayout>

</LinearLayout>

程序代码(PictrueView.java)

packagecom.bjwmt.camera;

importjava.io.File;

importjava.util.ArrayList;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.AdapterView;

importandroid.widget.GridView;

importandroid.widget.AdapterView.OnItemClickListener;

publicclassPictrueViewextendsActivity{

privateList<String>phoList;

privatestaticImageAdaptermyImageAdapter;

publicvoidonCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.picture_view);

        phoList= readFiles("sdcard/fatalityUpload/Thumbnail_fatality/");

        GridViewgridview=(GridView)findViewById(R.id.picGridView);//找到main.xml中定义gridview的id

        myImageAdapter= newImageAdapter(this,phoList);

        gridview.setAdapter(myImageAdapter);//调用ImageAdapter.java

        gridview.setOnItemClickListener(newOnItemClickListener(){//监听事件

         publicvoidonItemClick(AdapterView<?>parent, View view, intposition, longid){

//        myImageAdapter.getItemId(position);

         StringfileArr[] = phoList.get(position).toString().split("/");

         StringnewFilePath ="sdcard/fatalityUpload/fatality/"+fileArr[fileArr.length-1];

         Intentintent = newIntent();

         Bundleextras = newBundle();

         extras.putString("prePath",newFilePath);

         intent.putExtras(extras);

         intent.setClass(PictrueView.this,SubmitPhoto.class);

         finish();

     startActivity(intent);

//        Toast.makeText(PictrueView.this,""+position,Toast.LENGTH_SHORT).show();//显示信息;

         }

        });

    }

@SuppressWarnings("unchecked")

privatestaticList<String>readFiles(String path) {

List picFiles =newArrayList();

// 构建文件对象

File dir = newFile(path);

// 得到改文件夹下所有文件

File[] files =dir.listFiles();

if(files!= null) {

for(inti =0; i < files.length; i++) {

String fileName= files[i].getName();

// 过滤所有后缀为.jpg的文件

if(fileName.lastIndexOf(".")> 0

&&fileName.substring(fileName.lastIndexOf(".") + 1,

fileName.length()).equals("jpg")){

picFiles.add(files[i].getPath());

}

}

}

returnpicFiles;

}

}

图像内容编辑上传界面:

<?xmlversion="1.0"encoding="UTF-8"?>

<ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:scrollbars="none">

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

>

<TableLayoutandroid:layout_width="fill_parent"

android:layout_height="wrap_content" 

android:stretchColumns="*"

>

<TableRow>

    <Spinner 

    android:id="@+id/stationId"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

   />

   </TableRow>

   <TableRow>

    <EditText 

android:id="@+id/photoInfo" 

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:lines="3"

android:singleLine="true"

android:text="图片信息"

/>

   </TableRow>

   <TableRow>

    <ImageView 

    android:id="@+id/subPicImgView"

android:adjustViewBounds="true"

android:layout_width="wrap_content"

android:layout_height="300px"

/>

   </TableRow>

   <TableRow>

<TableLayoutandroid:layout_width="fill_parent"

android:layout_height="wrap_content" 

android:stretchColumns="*"

>

   <TableRow>

    <Button 

android:id="@+id/subButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:drawableLeft="@drawable/ic_menu_upload_mini"

android:text="上传"

/>

<Button 

android:id="@+id/returnMain"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:drawableLeft="@drawable/ic_menu_revert_mini"

android:text="返回"

/>

   </TableRow>

</TableLayout>

</TableRow>

</TableLayout>

</LinearLayout>

</ScrollView>

代码部分(SubmitPhoto.java)

packagecom.bjwmt.camera;

importjava.io.BufferedReader;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.net.MalformedURLException;

importjava.net.URL;

importjava.net.URLConnection;

importjava.util.ArrayList;

importjava.util.List;

importorg.apache.commons.net.ftp.FTP;

importorg.apache.commons.net.ftp.FTPClient;

importorg.apache.commons.net.ftp.FTPReply;

importandroid.app.Activity;

importandroid.app.AlertDialog;

importandroid.app.Dialog;

importandroid.app.ProgressDialog;

importandroid.content.ComponentName;

importandroid.content.Context;

importandroid.content.DialogInterface;

importandroid.content.Intent;

importandroid.content.pm.ActivityInfo;

importandroid.database.Cursor;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.drawable.BitmapDrawable;

importandroid.net.ConnectivityManager;

importandroid.net.NetworkInfo;

importandroid.os.Bundle;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.telephony.TelephonyManager;

importandroid.text.Html;

importandroid.util.Log;

importandroid.view.View;

importandroid.view.WindowManager;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.ImageView;

importandroid.widget.Spinner;

publicclassSubmitPhotoextendsActivity{

privateButtonsubButton;

privateButtonreturnButton;

privateImageViewsubPicImgView;

privateBundlepreBundle;

privateMyThreadmyThread;

// privateSpinner stationSpinner;

privateDBHelperhelper;

privateCursorcursor;

privateList<StationModel>list = newArrayList<StationModel>();

// privateMyThread thread = new MyThread();

@Override

    publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.photo_submit);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏

setListener();

Bitmap bitmap =getBitMap();

BitmapDrawablebmpDraw=newBitmapDrawable(bitmap);

subPicImgView.setImageDrawable(bmpDraw);

bitmap = null;

}

/**

* 给界面上的按钮及控件添加Listener

*/

publicvoidsetListener(){

preBundle =this.getIntent().getExtras();

subPicImgView =(ImageView)findViewById(R.id.subPicImgView);

subButton =(Button)findViewById(R.id.subButton);

returnButton =(Button)findViewById(R.id.returnMain);

//stationSpinner = (Spinner)findViewById(R.id.stationId);

subButton.setOnClickListener(subClick);

returnButton.setOnClickListener(returnClick);

helper = newDBHelper(this);

helper.open(this);

cursor =helper.loadAll();

cursor.moveToFirst();

if(!cursor.isAfterLast()){

intmodelId= cursor.getColumnIndex("ID");

intstName= cursor.getColumnIndex("STNAME");

intstid= cursor.getColumnIndex("STID");

intaddvcd= cursor.getColumnIndex("FATHER");

StationModel sm= newStationModel();

sm.setId(cursor.getInt(modelId));

sm.setStid(cursor.getInt(stid));

sm.setStname(cursor.getString(stName));

sm.setAddvcd(cursor.getString(addvcd));

list.add(sm);

cursor.moveToNext();

}

cursor.close();

helper.close();

}

/**

* 点击上传按钮触发

*/

privateOnClickListenersubClick = newOnClickListener(){

publicvoidonClick(Viewv) {

ConnectivityManagermanager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);  

       NetworkInfonetworkinfo = manager.getActiveNetworkInfo();  

       if(networkinfo== null|| !networkinfo.isAvailable()) {  // 当前网络不可用

        newAlertDialog.Builder(SubmitPhoto.this)

           .setMessage("检查到没有可用的网络连接,请打开网络连接")

           .setPositiveButton("确定",

            newDialogInterface.OnClickListener(){

                   publicvoidonClick(DialogInterfacedialoginterface, inti){

                    ComponentNamecn = newComponentName("com.android.settings","com.android.settings.Settings");

Intent intent =newIntent();

intent.setComponent(cn);

intent.setAction("android.intent.action.VIEW");

startActivity(intent);

//                    finish();

                   }

            }

           ).show();

         }else{

         showDialog(0);

         myThread= newMyThread();

         myThread.start();

         }

}

};

/**

* 点击返回按钮时触发的事件

*/

privateOnClickListenerreturnClick = newOnClickListener(){

publicvoidonClick(Viewv) {

newAlertDialog.Builder(SubmitPhoto.this)

.setTitle("提示").setMessage("确定放弃上传?")

.setPositiveButton("确定",

newDialogInterface.OnClickListener(){

publicvoidonClick(DialogInterfacedialog,

intwhichButton){

//if(!myThread.isInterrupted()){

//myThread.interrupt();

// }

Intent intent =newIntent();

intent.setClass(SubmitPhoto.this,MainPage.class);

finish();

startActivity(intent);

}

}).setNegativeButton("取消",

newDialogInterface.OnClickListener(){

publicvoidonClick(DialogInterfacedialog,

intwhichButton){

// 取消按钮事件

}

}

).show();

}

};

/**

* 将上个界面传过来的图片地址转换成Bitmap返回

* @return

*/

publicBitmapgetBitMap(){

String picPath =preBundle.getString("prePath");

BitmapFactory.Optionsoptions = newBitmapFactory.Options();

        options.inSampleSize= 2;

        Bitmapbm = BitmapFactory.decodeFile(picPath, options);

returnbm;

}

/**

* 当调用showDialog()时触发此函数

* 控制弹出的内容

*/

@Override

    protectedDialogonCreateDialog(intid) {

        switch(id){

       case0: {

           ProgressDialogdialog = newProgressDialog(SubmitPhoto.this);

           dialog.setMessage("文件上传中,请稍后...");

           dialog.setIndeterminate(true);

           dialog.setCancelable(true);

//            Log.d("dialog","<<<<<<<<<<<<<<<<-----<<<<<<<<<dialoging");

           returndialog;

       }

            case1: {

             ProgressDialogmProgressDialog = newProgressDialog(SubmitPhoto.this);

                mProgressDialog.setIcon(R.drawable.ic_menu_upload_mini);

                mProgressDialog.setTitle("文件上传中请稍后");

                mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

                mProgressDialog.setMax(100);

                mProgressDialog.setButton("取消", newDialogInterface.OnClickListener(){

                    publicvoidonClick(DialogInterfacedialog, intwhichButton) {

//                    removeDialog(1);

                    }

                });

                returnmProgressDialog;

            }

        }

        returnnull;

    }

/**

* 显示Dialog的method

* @param mess

*/

privatevoidshowToast(Stringmess) {

//Log.d("showToast", "======================showToast");

newAlertDialog.Builder(SubmitPhoto.this).setTitle("Message")

.setMessage(Html.fromHtml(mess)).setNegativeButton("确定",

newDialogInterface.OnClickListener(){

publicvoidonClick(DialogInterfacedialog, intwhich) {

//if(!myThread.isInterrupted()){

//myThread.interrupt();

// }

Intent intent =newIntent();

    intent.setClass(SubmitPhoto.this,MainPage.class);

    finish();

    startActivity(intent);

}

}).show();

}

/*

* 接收子线程传递过来的结果

* 负责给主线程发送消息

*/

HandlersubHandler = new Handler() {  

        publicvoid handleMessage(Message msg) {   

             switch(msg.what) {   

             case0:   

             showDialog(0);  

             break;   

             case1:

             removeDialog(0);

             Bundlebundle = msg.getData();

//            Log.d("uploadresult",">>>>>>>>>>>>>>>>>>uploadresult:"+bundle.getString("uploadMsg"));

             showToast(bundle.getString("uploadMsg"));

             break;

             case2:

             removeDialog(0);

             showToast("您请求的网络连接失败,请稍后重试");

             break;

             case3:

             removeDialog(0);

             showToast("<p>对不起,您的手机卡没有被许可使用本程序进行上传功能,如有问题请<ahref="mailto:qingsong.yang@bjwmt.com"mce_href="mailto:c.com">联系我们</a></p>");

             break;

             }   

             super.handleMessage(msg);   

        }   

};  

/**

* 图片上传线程

* 将上传结果通过Handler传递给主线程

* @author peter

*/

class MyThreadextends Thread implements Runnable { 

private StringupMsg = "",file="",fileName="";

/**

* 判断网络是否可用

*/ 

public intgetCon(String url) {

int con1 = 0;

URL objURL =null;

try {

objURL = newURL(url);

con1 = 1;

} catch(MalformedURLException e2) {

con1 = 0;

}

if (objURL !=null) {

URLConnectionconn = null;

try {

conn =objURL.openConnection();

conn.setConnectTimeout(1000);

conn.setReadTimeout(1000);

con1 = 1;

} catch(IOException e) {

con1 = 0;

}

if (conn !=null) {

try {

conn.connect();

con1 = 1;

} catch(IOException e) {

con1 = 0;

}

}

}

return con1;

}

/**

* 取得请求返回的数据字符串

* @param url

* @return

*/

public StringgetText(String url){

String text ="";

try {

URL objURL = newURL(url);

URLConnectionconn = objURL.openConnection();

conn.setConnectTimeout(6* 1000);

conn.connect();

BufferedReaderbr = new BufferedReader(new InputStreamReader(conn.getInputStream()));

StringinputLine;

if (br == null){

return null;

}

while((inputLine = br.readLine()) != null) {

text +=inputLine;

}

} catch(MalformedURLException e) {

e.printStackTrace();

} catch(IOException e) {

e.printStackTrace();

}

return text;

}

/**

* 图片上传

*/

publicvoiduploadFile(){

TelephonyManagertm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

FTPClient ftp =newFTPClient();

String server ="xx.xx.xx.xx";

String username= tm.getDeviceId(); 

String password= "micromulti"; 

try{

ftp.setDefaultTimeout(30000);

ftp.setDefaultPort(21);

ftp.connect(server);

intreply= ftp.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)){

ftp.disconnect();

upMsg ="FTP 连接失败";

} else{

if(ftp.login(username,password)) {

ftp.enterLocalPassiveMode();

ftp.setFileType(FTP.BINARY_FILE_TYPE);

ftp.setRemoteVerificationEnabled(false); 

FileInputStreamfis = newFileInputStream(newFile(file));

ftp.storeFile(fileName,fis);

fis.close();

    }

    ftp.logout();

    upMsg= "文件上传成功";

     }

     }catch(Exception e) {

     upMsg= ""+e;

     }finally{

     if(ftp.isConnected()){

     try{

     ftp.disconnect();

     }catch(Exception ioe) {

     upMsg= ""+ioe;

     }

     }

     }

}

        publicvoidrun(){ 

         Stringfile = preBundle.getString("prePath");

         Stringarrs[] = file.split("/");

     StringfileName = arrs[arrs.length-1];

     StringfileStrArr[] = fileName.split("-");

     StringphoneIMSI = fileStrArr[0];

     Stringlat = fileStrArr[1];

         Stringlng = fileStrArr[2];

     StringshootTime = fileStrArr[3];

//        Log.d("lat&lng","*******************latis:"+lat+"  lng is:"+lng+"  fileNameis:"+fileName);

         EditTextpicInfo = (EditText)findViewById(R.id.photoInfo);

         StringfreshUrl ="http://xx.xx.xx.xx:8080/DataAcquisition/photoUploadAction.do?photoWebModel.actiontype=upload";

     StringpostUrl = freshUrl+"&photoWebModel.phoneIMSI="+phoneIMSI

     +"&photoWebModel.lat="+lat

     +"&photoWebModel.lng="+lng

     +"&photoWebModel.shootTime="+shootTime

     +"&photoWebModel.picInfo="+picInfo.getText()

     +"&photoWebModel.filename="+fileName;

     Messagemessage = newMessage();

     Stringresult = "";

     if(this.getCon(postUrl)==1){

     result= getText(postUrl);

     Log.d("uploadConfirmResult",">>>>>>>>>>>>>>>>>>"+result.trim());

            }else{

                message.what= 2;   

            }

     if(result.trim().equals("true")){

     StringthumbnailFilePath ="sdcard/fatalityUpload/Thumbnail_fatality/"+fileName;

     uploadFile();//执行图片上传

     Log.d("uploadFile",">>>>>>>>>>>>>>>>>>>>>>>>>complate!stopUpload...");

File file2 = newFile(file);

file2.delete();

file2 = null;

File file3 = newFile(thumbnailFilePath);

file3.delete();

file3 = null;

             Bundlebundle = newBundle();

             bundle.putString("uploadMsg",upMsg);

             message.setData(bundle);

                message.what= 1;   

}elseif(result.trim().equals("false1")){

                message.what= 3;   

}else{}

     Log.d("mess.what","<<<<<<<<<<<<<<<<<<message.whatis :"+message.what);

     subHandler.sendMessage(message);

        }   

}

}

预览还没有上传的图片界面(photoview.xml):

本界面实现一个煎蛋的图像回廊,点击对应的图片后即跳转到图片编辑上传界面。

<?xmlversion="1.0"encoding="utf-8"?>

<RelativeLayout 

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<ImageSwitcher 

android:id="@+id/switcher"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_alignParentTop="true"

android:layout_alignParentLeft="true"

/>

<Gallery 

android:id="@+id/gallery" 

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_alignParentLeft="true"

/>

<!-- 

android:spacing="3dp"

-->

<Button 

android:id="@+id/existUpload"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:drawableLeft="@drawable/ic_menu_upload_mini"

android:layout_marginLeft="380px"

android:layout_marginTop="50px"

android:text="上传"

/>

<Button 

android:id="@+id/backMain"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:drawableLeft="@drawable/ic_menu_revert_mini"

android:layout_marginLeft="380px"

android:text="返回"

/>

</RelativeLayout>

代码部分(PhotoView.java)

packagecom.bjwmt.camera;

importjava.io.File;

importjava.util.ArrayList;

importjava.util.List;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.content.pm.ActivityInfo;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.drawable.BitmapDrawable;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.WindowManager;

importandroid.view.View.OnClickListener;

importandroid.view.animation.AnimationUtils;

importandroid.widget.AdapterView;

importandroid.widget.Button;

importandroid.widget.Gallery;

importandroid.widget.ImageSwitcher;

importandroid.widget.ImageView;

importandroid.widget.ViewSwitcher;

importandroid.widget.AdapterView.OnItemClickListener;

importandroid.widget.Gallery.LayoutParams;

/**

 * 图片艺廊式的选择界面 实现

 * 显示照片(AdapterView)、等待听取照片单机动作(OnItemSelectedListener)、进行照片切换动作(ViewSwitcher)、负责保存照片(ViewFactory)等功能

 */

publicclassPhotoViewextendsActivity implements

AdapterView.OnItemSelectedListener,ViewSwitcher.ViewFactory {

privatestaticImageSwitchermSwitcher;

privatestaticButtonreturnButton;

privatestaticButtonsaveButton;

privateList<String>phoList;

// privateList<String> or_phoList;

privateStringnewFilePath = "";

@SuppressWarnings("unchecked")

privatestaticList<String>readFiles(String path) {

List picFiles =newArrayList();

// 构建文件对象

File dir = newFile(path);

// 得到改文件夹下所有文件

File[] files =dir.listFiles();

if(files!= null) {

for(inti =0; i < files.length; i++) {

String fileName= files[i].getName();

// 过滤所有后缀为.jpg的文件

if(fileName.lastIndexOf(".")> 0

&&fileName.substring(fileName.lastIndexOf(".") + 1,

fileName.length()).equals("jpg")||fileName.substring(fileName.lastIndexOf(".")+ 1,

fileName.length()).equals(".gif")){

picFiles.add(files[i].getPath());

}

}

}

returnpicFiles;

}

// Thread myT =new Thread(new Runnable() {

// public voidrun() {

// // TODO 让该线程实现的功能

// try {

// or_phoList =readFiles("sdcard/fatalityUpload/");

// } catch(Exception e) {

//e.printStackTrace();

// }

// }

// });

publicstaticvoidsetInSampleSize(BitmapFactory.Optionsoptions,inttargetSize) {

options.outWidth>>= 1;

options.outHeight>>= 1;

while(options.outWidth> targetSize || options.outHeight > targetSize) {

options.inSampleSize<<= 1;

options.outWidth>>= 1;

options.outHeight>>= 1;

}

}

@Override

publicvoidonCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.photoview);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 横屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏

this.setListener();

mSwitcher =(ImageSwitcher) findViewById(R.id.switcher);

mSwitcher.setFactory(this);

//mSwitcher.setOnClickListener(clickImageView);

// 设置照片切换时的淡入淡出模式

mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_in));

mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,

android.R.anim.fade_out));

Gallery g =(Gallery) findViewById(R.id.gallery);

g.setAdapter(newImageAdapter(this,phoList));

g.setOnItemSelectedListener(this);

g.setOnItemClickListener(newOnItemClickListener() 

   {

     publicvoidonItemClick(AdapterView<?>parent, 

                      Viewv, intposition, longid) 

     { 

       //当内容被点击的时候处理的事件

     }

   });

}

privatevoidsetListener(){

phoList =readFiles("sdcard/fatalityUpload/Thumbnail_fatality/");

returnButton =(Button) findViewById(R.id.backMain);

saveButton =(Button) findViewById(R.id.existUpload);

returnButton.setOnClickListener(returnClick);

saveButton.setOnClickListener(saveClick);

}

privateOnClickListenersaveClick = newOnClickListener() {

publicvoidonClick(Viewv) {

Intent intent =newIntent();

Bundle bundle =newBundle();

//bundle.putByteArray("picPre", newData);

bundle.putString("picPath",newFilePath);

//intent.putExtra("picPre", data);

intent.putExtras(bundle);

intent.setClass(PhotoView.this,SubmitPhoto.class);

finish();

startActivity(intent);

}

};

privateOnClickListenerreturnClick = newOnClickListener() {

publicvoidonClick(Viewv) {

Intent intent =newIntent();

intent.setClass(PhotoView.this,MainPage.class);

finish();

startActivity(intent);

}

};

/**

* 当用户点击照片艺廊中的照片时触发该函数

*/

@SuppressWarnings("unchecked")

publicvoidonItemSelected(AdapterViewparent, View v, intposition, longid){

String fileArr[]= phoList.get(position).toString().split("/");

newFilePath ="sdcard/fatalityUpload/fatality/"+fileArr[fileArr.length-1];

//Log.d("onItemSelectedLOG",">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+phoList.get(position).toString());

//Log.d("onItemSelectedLOG",">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"+newFilePath);

Bitmap bm =BitmapFactory.decodeFile(phoList.get(position).toString());

BitmapDrawablebmpDraw=newBitmapDrawable(bm);

mSwitcher.setImageDrawable(bmpDraw);

}

publicvoidonNothingSelected(AdapterView<?>arg0) {

}

/**

* 显示照片函数

*/

publicViewmakeView(){

ImageViewimageView = newImageView(this);

imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

android.widget.FrameLayout.LayoutParamsimageSwitcher = newImageSwitcher.LayoutParams(

LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);

imageView.setLayoutParams(imageSwitcher);

returnimageView;

}

/**

* 当点击图片时切换到图片编辑上传界面

*/

// privateOnClickListener clickImageView = new OnClickListener() {

// public voidonClick(View v) {

// Intent intent= new Intent();

//intent.setClass(PhotoView.this, SubmitPhoto.class);

// finish();

//startActivity(intent);

// }

// };

}

帮助类(ImageAdapter.java)

packagecom.bjwmt.camera;

importjava.util.List;

importandroid.content.Context;

importandroid.content.res.TypedArray;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.BaseAdapter;

importandroid.widget.GridView;

importandroid.widget.ImageView;

publicclassImageAdapterextendsBaseAdapter {

    intmGalleryItemBackground;

    privateContextmContext;

    privateList<String>lis;

    publicImageAdapter(Contextc,List<String> li) 

    {

      mContext= c;

      lis=li;

      TypedArraya = mContext.obtainStyledAttributes(R.styleable.Gallery);

      mGalleryItemBackground= a.getResourceId(

          R.styleable.Gallery_android_galleryItemBackground,0);

      a.recycle();

    }

    publicintgetCount() 

    {

      returnlis.size();

    }

    publicObjectgetItem(intposition) 

    {

      returnposition;

    }

    publiclonggetItemId(intposition) 

    {

      returnposition;

    }

    publicViewgetView(intposition, View convertView, 

                          ViewGroupparent) 

    {

      ImageViewi = newImageView(mContext);

      Bitmapbm = BitmapFactory.decodeFile(lis.get(position).toString());

      i.setImageBitmap(bm);

      i.setScaleType(ImageView.ScaleType.CENTER_CROP);

      i.setLayoutParams(newGridView.LayoutParams(88,88));

      i.setBackgroundResource(mGalleryItemBackground);

      i.setPadding(3,3,3,3);

      returni;

    } 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值