/**
*
* TODO 数据上传监听器
* 2012-1-10 下午5:34:01
* @author zhuoran.xu
*
*/
public class MyTransferListener implements FTPDataTransferListener {
long percent = 0L;
//传输中止时触发
public void aborted() {
Log.d("MyFTPClient","file aborted");
Log.i("MyFTPClient","MyFTPClientaborted:" + uploadSize);
saveBreakpointInfo();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
}
//文件传输完成时,触发
public void completed() {
//文件传输完成时,将已上传文件大小置空
uploadSize = 0;
String fileName = getFileName(path);
String [] keys = getKeys(fileName);
//文件传输完成时,将本地化信息清空。
editor.remove(fileName);
editor.remove(keys[0]);
editor.remove(keys[1]);
editor.remove(keys[2]);
editor.commit();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
Intent intent = new Intent();
intent.setAction(UPLOAD_COMPLETED_ACTION);
intent.putExtra("path", path);
context.sendBroadcast(intent);
Log.d("MyFTPClient","file completed");
}
//传输失败时触发
public void failed() {
Log.d("MyFTPClient","file failed");
Log.i("MyFTPClient","MyFTPClientFailed:"+uploadSize);
saveBreakpointInfo();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
}
//文件开始上传或下载时触发
public void started() {
Log.d("MyFTPClient","file start");
}
//显示已经传输的字节数
public void transferred(int arg0) {
uploadSize += arg0;
percent = (long)(uploadSize*100/(fileSize*1.0));
Log.d("MyFTPClient","percent:"+percent+"% UploadSize:"+uploadSize+"byte");
}
}
/**
*
* TODO 终止数据的上传,在上传线程中调用无效,需在其他线程中调用。
*/
private void abortDataTransfer() {
try {
ftp.abortCurrentDataTransfer(false);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (FTPIllegalReplyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/**
*
* TODO 断开和服务端的连接
*/
private void disconnect() {
if(ftp != null){
try {
ftp.disconnect(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
* TODO 根据路径获取文件名
* @param path
* @return
*/
private String getFileName(String path){
String fileName = null;
path = path.trim();
fileName = path.substring(path.lastIndexOf("/")+1);
return fileName;
}
/**
*
* TODO 往SharedPreferences中存储断点信息,以要上传的文件名(UUID)为Key
*/
private void saveBreakpointInfo() {
String fileName = getFileName(path);
Log.i(TAG, "fileName:" + fileName);
Log.i(TAG, "saveBreakpointInfo");
String [] keys = getKeys(fileName);
//拼接要存入的断点信息
try {
//将断点信息存入
editor.putString(fileName, fileName);
editor.putString(keys[0], path);
editor.putString(keys[1], serverPath);
editor.putLong(keys[2], uploadSize);
boolean b = editor.commit();
Log.i(TAG, "Is save successfully?" + b);
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
/**
*
* TODO 构造存入sharedPreferences里的key值
* @param fileName
* @return
*/
private String [] getKeys(String fileName){
String keyPath = fileName + "_Path";//sharedPreferences里保存文件路径的key
String keyServerPath = fileName + "_ServerPath";//sharedPreferences里保存服务端存储路径的key
String keyUploadSize = fileName + "_UploadSize";//sharedPreferences里保存已上传文件大小的key
String [] keys = {keyPath ,keyServerPath ,keyUploadSize};
return keys;
}
/**
*
* TODO 网络状态广播接收者
* 2012-1-11 下午5:54:06
* @author zhuoran.xu
*
*/
class ConnectionChangeReceiver extends BroadcastReceiver {
private static final String TAG = "ConnectionChangeReceiver";
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null && activeNetInfo.isConnected()) {
Log.i(TAG,"hava active network");
Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), 1).show();
}else{
Log.i(TAG, "have no active network");
try {
ftp.abortCurrentDataTransfer(false);
} catch (IOException e) {
e.printStackTrace();
} catch (FTPIllegalReplyException e) {
e.printStackTrace();
}
}
// if (mobNetInfo != null){
// Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), 1).show();
// }
}
}
}
*
* TODO 数据上传监听器
* 2012-1-10 下午5:34:01
* @author zhuoran.xu
*
*/
public class MyTransferListener implements FTPDataTransferListener {
long percent = 0L;
//传输中止时触发
public void aborted() {
Log.d("MyFTPClient","file aborted");
Log.i("MyFTPClient","MyFTPClientaborted:" + uploadSize);
saveBreakpointInfo();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
}
//文件传输完成时,触发
public void completed() {
//文件传输完成时,将已上传文件大小置空
uploadSize = 0;
String fileName = getFileName(path);
String [] keys = getKeys(fileName);
//文件传输完成时,将本地化信息清空。
editor.remove(fileName);
editor.remove(keys[0]);
editor.remove(keys[1]);
editor.remove(keys[2]);
editor.commit();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
Intent intent = new Intent();
intent.setAction(UPLOAD_COMPLETED_ACTION);
intent.putExtra("path", path);
context.sendBroadcast(intent);
Log.d("MyFTPClient","file completed");
}
//传输失败时触发
public void failed() {
Log.d("MyFTPClient","file failed");
Log.i("MyFTPClient","MyFTPClientFailed:"+uploadSize);
saveBreakpointInfo();
disconnect();
context.unregisterReceiver(connctionChangeReceiver);
}
//文件开始上传或下载时触发
public void started() {
Log.d("MyFTPClient","file start");
}
//显示已经传输的字节数
public void transferred(int arg0) {
uploadSize += arg0;
percent = (long)(uploadSize*100/(fileSize*1.0));
Log.d("MyFTPClient","percent:"+percent+"% UploadSize:"+uploadSize+"byte");
}
}
/**
*
* TODO 终止数据的上传,在上传线程中调用无效,需在其他线程中调用。
*/
private void abortDataTransfer() {
try {
ftp.abortCurrentDataTransfer(false);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (FTPIllegalReplyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/**
*
* TODO 断开和服务端的连接
*/
private void disconnect() {
if(ftp != null){
try {
ftp.disconnect(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
*
* TODO 根据路径获取文件名
* @param path
* @return
*/
private String getFileName(String path){
String fileName = null;
path = path.trim();
fileName = path.substring(path.lastIndexOf("/")+1);
return fileName;
}
/**
*
* TODO 往SharedPreferences中存储断点信息,以要上传的文件名(UUID)为Key
*/
private void saveBreakpointInfo() {
String fileName = getFileName(path);
Log.i(TAG, "fileName:" + fileName);
Log.i(TAG, "saveBreakpointInfo");
String [] keys = getKeys(fileName);
//拼接要存入的断点信息
try {
//将断点信息存入
editor.putString(fileName, fileName);
editor.putString(keys[0], path);
editor.putString(keys[1], serverPath);
editor.putLong(keys[2], uploadSize);
boolean b = editor.commit();
Log.i(TAG, "Is save successfully?" + b);
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
/**
*
* TODO 构造存入sharedPreferences里的key值
* @param fileName
* @return
*/
private String [] getKeys(String fileName){
String keyPath = fileName + "_Path";//sharedPreferences里保存文件路径的key
String keyServerPath = fileName + "_ServerPath";//sharedPreferences里保存服务端存储路径的key
String keyUploadSize = fileName + "_UploadSize";//sharedPreferences里保存已上传文件大小的key
String [] keys = {keyPath ,keyServerPath ,keyUploadSize};
return keys;
}
/**
*
* TODO 网络状态广播接收者
* 2012-1-11 下午5:54:06
* @author zhuoran.xu
*
*/
class ConnectionChangeReceiver extends BroadcastReceiver {
private static final String TAG = "ConnectionChangeReceiver";
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null && activeNetInfo.isConnected()) {
Log.i(TAG,"hava active network");
Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), 1).show();
}else{
Log.i(TAG, "have no active network");
try {
ftp.abortCurrentDataTransfer(false);
} catch (IOException e) {
e.printStackTrace();
} catch (FTPIllegalReplyException e) {
e.printStackTrace();
}
}
// if (mobNetInfo != null){
// Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), 1).show();
// }
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货