OPPO R9怎么使用 OPPO R9使用技巧介绍
在国内,OPPO R9备受忠实用户的喜欢,这款手机除了颜值高以外,功能也是相当的丰富,还有很多值得我们挖掘的地方,那么OPPO R9怎么使用呢?接下来,小编就为大家带来OPPO R9使用技巧介绍。
OPPO R9使用指南:
1、自拍新体验,前置全景拍摄
对于一些喜欢自拍的小女生而言,在没有自拍神器的情况下,自拍出来照片就像范冰冰的武媚娘,都是“大头照”,身后的美景,身边的朋友都被无情的切割了。但使用OPPO手机就不一样了,OPPO R9的前置自拍模式还隐藏着很多不为人知的功能,用好这些功能会让照片充满趣味性。其中就有一项非常有趣的功能那就是前置全景拍摄。不需要任何辅助工具,一个全景自拍功能就可以轻易解决。
点击相机界面上方光圈按钮,可以设置语音拍照、延时拍照和自拍翻转等,打开手机的自拍功能后,选择“全景”拍摄,平稳移动手机就可以拍出你想要的效果了。进入设置——相机,可以设置闪拍、音量键功能、构图线、快门声音等;删除了留声拍照、超级微距、慢镜头等功能,慢速快门在专业模式里,快镜头改名延时摄影。
2、壁纸与主题
ColorOS3.0给用户提供很多漂亮的锁屏壁纸及丰富多彩的主题,用户可以点击设置,进入“壁纸有锁屏杂志”,然后选择“锁屏杂志”,接着选择相关的类型设置。
3、应用商店
ColorOS3.0的软件商店经过官方检测,包括常用软件应用、游戏,还针对性的拥有精选、分类、排行的检索,排行榜也看着与其他app商店有较大区别,刷榜情况不严重,最大限度的把常用APP呈现在页面上,降低查找的难度。
4、手机桌面编辑
不喜欢手机桌面?又不知道怎么编辑?这个问题其实很简单,点击桌面“双指缩小”即可进入桌面编辑界面,在这里用户可以进行添加插件、设置滑屏特性等不同的编辑工作。
5、怎么调振动,无法静音怎么办?
振动调节:依次进入设置——声音与振动,用户可以设置响铃模式振动和静音模式振动。
当我们音量调到最小(不能往下调的情况下),可以还是无法静音怎么办,调节音量时点击铃铛可以一键切换响铃/静音啦。
但是静音后为什么播放视频还是有声音?系统声音与媒体声音分开设置,静音模式只控制系统声音;播放音乐和视频时可以单独调节媒体音量大小。
6、自带应用设置
请点击进入“设置”,然后在“对应应用”中找到“系统设置”就可以进行相关设置了。所有自带应用的设置都集中在系统设置中,包括电话、电话本、信息、手机管家、相机、相册、音乐、语音助手、日历、备份与恢复、软件商店、游戏中心、主题商店、浏览器、购物中心。
7、想要备份手机数据找不到云盘?
在“设置”中选择“云服务”就可以打开相应的功能啦,用户可以在云盘中保留联系人、短信、照片等。如果数据丢了,云盘中没有备份,不用担心,将手机连接到电脑上,然后使用 专业的数据恢复软件互盾数据恢复软件即可轻松恢复数据。
以上内容是小编为大家带来的OPPO R9使用说明,如果你在使用同款手机不妨试试。
这篇文章介绍了简单实现android短信发送器的教程,非常实用,有需要的同学可以参考一下本文先看看效果图:
activity_main.xml
代码如下 | 复制代码 |
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.sendinfo.MainActivity"> <TextView android:id="@+id/tv_input_number" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="@string/place_input_number" android:textSize="20px"/> <EditText android:id="@+id/et_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/tv_input_number" android:inputType="phone">
<TextView android:id="@+id/tv_input_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/et_number" android:text="请输入正文" android:textSize="20px" android:textColor="#ff2800"/> <EditText android:lines="5" android:id="@+id/et_input_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_below="@id/tv_input_content" android:inputType="textMultiLine"/> <Button android:id="@+id/bt_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@id/et_input_content" android:text="发送"/> |
MainActivite.java
代码如下 | 复制代码 |
packagecom.example.sendinfo; importjava.util.ArrayList; importjava.util.Iterator; importandroid.os.Bundle; importandroid.support.v7.app.ActionBarActivity; importandroid.telephony.SmsManager; importandroid.text.TextUtils; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.Toast; publicclassMainActivityextendsActionBarActivityimplementsOnClickListener { //获取数据的对象 privateEditText et_number; privateEditText et_content; @Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_number = (EditText) findViewById(R.id.et_number); et_ontent = (EditText) findViewById(R.id.et_input_content); Button bt_send = (Button) findViewById(R.id.bt_send); bt_send.setOnClickListener(this) } @Override publicvoidonClick(View v) { switch(v.getId()) { caR.id.bt_send: //获取用户输入的数据 String content = et_content.getText().toString().trim(); String number = et_number.getText().toString().trim(); if(TextUtils.isEmpty(content) || TextUtils.isEmpty(number)){ Toast.makeText(this,"电话号码或者内容不能为空", Toast.LENGTH_SHORT).show(); return; }else{ //发送短信API :得到一个信息管理器 实例 SmsManager smsManager = SmsManager.getDefault(); //短信大于70字符时,则将短信拆分成多条发送 ArrayList for(String string : contents) { smsManager.sendTextMessage(number,null, string,null,null); } } break; default: break; } } } |
小编推荐的这篇文章介绍了Android实现空心圆角矩形按钮的实例代码,有兴趣的同学可以尝试一下
页面上有时会用到背景为空心圆角矩形的Button,可以通过xml绘制出来。
drawrable文件夹下bg_red_hollow_rectangle.xml
代码如下 | 复制代码 |
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="1dp" android:color="#ce1818"/> |
shape:图形,rectangle为矩形;
stoke:描边
solid:填充
corners:圆角
在layout中的使用
代码如下 | 复制代码 |
<Button android:layout_width="80dp" android:layout_height="50dp" android:background="@drawable/bg_red_hollow_rectangle" android:gravity="center" android:text="分享"/> |
效果图如下:
小编给大家分享了一篇介绍了Android选择图片或拍照图片上传到服务器的教程的文章,代码简单易懂,有需要的朋友可以动手尝试运行一下下文中代码最近要搞一个项目,需要上传相册和拍照的图片,不负所望,终于完成了! 不过需要说明一下,其实网上很多教程拍照的图片,都是缩略图不是很清晰,所以需要在调用照相机的时候,事先生成一个地址,用于标识拍照的图片URI
具体上传代码:
1.选择图片和上传界面,包括上传完成和异常的回调监听
代码如下 | 复制代码 |
packagecom.spring.sky.image.upload;
importjava.util.HashMap; importjava.util.Map;
importandroid.app.Activity; importandroid.app.ProgressDialog; importandroid.content.Intent; importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.os.Bundle; importandroid.os.Handler; importandroid.os.Message; importandroid.util.Log; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.ImageView; importandroid.widget.ProgressBar; importandroid.widget.TextView; importandroid.widget.Toast;
importcom.spring.sky.image.upload.network.UploadUtil; importcom.spring.sky.image.upload.network.UploadUtil.OnUploadProcessListener; /** * @author spring sky * Email :vipa1888@163.com * QQ: 840950105 * 说明:主要用于选择文件和上传文件操作 */ publicclassMainActivityextendsActivityimplementsOnClickListener,OnUploadProcessListener{ privatestaticfinalString TAG ="uploadImage";
/** * 去上传文件 */ protectedstaticfinalintTO_UPLOAD_FILE =1; /** * 上传文件响应 */ protectedstaticfinalintUPLOAD_FILE_DONE =2;// /** * 选择文件 */ publicstaticfinalintTO_SELECT_PHOTO =3; /** * 上传初始化 */ privatestaticfinalintUPLOAD_INIT_PROCESS =4; /** * 上传中 */ privatestaticfinalintUPLOAD_IN_PROCESS =5; /*** * 这里的这个URL是我服务器的javaEE环境URL */ privatestaticString requestURL ="http://192.168.10.160:8080/fileUpload/p/file!upload"; privateButton selectButton,uploadButton; privateImageView imageView; privateTextView uploadImageResult; privateProgressBar progressBar;
privateString picPath =null; privateProgressDialog progressDialog;
/** Called when the activity is first created. */ @Override publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); }
/** * 初始化数据 */ privatevoidinitView() { selectButton = (Button)this.findViewById(R.id.selectImage); uploadButton = (Button)this.findViewById(R.id.uploadImage); selectButton.setOnClickListener(this); uploadButton.setOnClickListener(this); imageView = (ImageView)this.findViewById(R.id.imageView); uploadImageResult = (TextView) findViewById(R.id.uploadImageResult); progressDialog =newProgressDialog(this); progressBar = (ProgressBar) findViewById(R.id.progressBar1); }
@Override publicvoidonClick(View v) { switch(v.getId()) { caseR.id.selectImage: Intent intent =newIntent(this,SelectPicActivity.class); startActivityForResult(intent, TO_SELECT_PHOTO); break; caseR.id.uploadImage: if(picPath!=null) { handler.sendEmptyMessage(TO_UPLOAD_FILE); }else{ Toast.makeText(this,"上传的文件路径出错", Toast.LENGTH_LONG).show(); } break; default: break; } }
@Override protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) { if(resultCode==Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) { picPath = data.getStringExtra(SelectPicActivity.KEY_PHOTO_PATH); Log.i(TAG,"最终选择的图片="+picPath); Bitmap bm = BitmapFactory.decodeFile(picPath); imageView.setImageBitmap(bm); } super.onActivityResult(requestCode, resultCode, data); }
/** * 上传服务器响应回调 */ @Override publicvoidonUploadDone(intresponseCode, String message) { progressDialog.dismiss(); Message msg = Message.obtain(); msg.what = UPLOAD_FILE_DONE; msg.arg1 = responseCode; msg.obj = message; handler.sendMessage(msg); }
privatevoidtoUploadFile() { uploadImageResult.setText("正在上传中..."); progressDialog.setMessage("正在上传文件..."); progressDialog.show(); String fileKey ="pic"; UploadUtil uploadUtil = UploadUtil.getInstance();; uploadUtil.setOnUploadProcessListener(this);//设置监听器监听上传状态
Map params.put("orderId","11111"); uploadUtil.uploadFile( picPath,fileKey, requestURL,params); }
privateHandler handler =newHandler(){ @Override publicvoidhandleMessage(Message msg) { switch(msg.what) { caseTO_UPLOAD_FILE: toUploadFile(); break;
caseUPLOAD_INIT_PROCESS: progressBar.setMax(msg.arg1); break; caseUPLOAD_IN_PROCESS: progressBar.setProgress(msg.arg1); break; caseUPLOAD_FILE_DONE: String result ="响应码:"+msg.arg1+"\n响应信息:"+msg.obj+"\n耗时:"+UploadUtil.getRequestTime()+"秒"; uploadImageResult.setText(result); break; default: break; } super.handleMessage(msg); }
};
@Override publicvoidonUploadProcess(intuploadSize) { Message msg = Message.obtain(); msg.what = UPLOAD_IN_PROCESS; msg.arg1 = uploadSize; handler.sendMessage(msg ); }
@Override publicvoidinitUpload(intfileSize) { Message msg = Message.obtain(); msg.what = UPLOAD_INIT_PROCESS; msg.arg1 = fileSize; handler.sendMessage(msg ); }
} |
2.选择图片界面,主要涉及两种方式:选择图片和及时拍照图片
代码如下 | 复制代码 |
packagecom.spring.sky.image.upload;
importandroid.app.Activity; importandroid.content.ContentValues; importandroid.content.Intent; importandroid.database.Cursor; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.provider.MediaStore; importandroid.util.Log; importandroid.view.MotionEvent; importandroid.view.View; importandroid.view.View.OnClickListener; importandroid.widget.Button; importandroid.widget.LinearLayout; importandroid.widget.Toast;
/** * @author spring sky * Email :vipa1888@163.com * QQ: 840950105 * @version 创建时间:2012-11-22 上午9:20:03 * 说明:主要用于选择文件操作 */
publicclassSelectPicActivityextendsActivityimplementsOnClickListener{
/*** * 使用照相机拍照获取图片 */ publicstaticfinalintSELECT_PIC_BY_TACK_PHOTO =1; /*** * 使用相册中的图片 */ publicstaticfinalintSELECT_PIC_BY_PICK_PHOTO =2;
/*** * 从Intent获取图片路径的KEY */ publicstaticfinalString KEY_PHOTO_PATH ="photo_path";
privatestaticfinalString TAG ="SelectPicActivity";
privateLinearLayout dialogLayout; privateButton takePhotoBtn,pickPhotoBtn,cancelBtn;
/**获取到的图片路径*/ privateString picPath;
privateIntent lastIntent ;
privateUri photoUri; @Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.select_pic_layout); initView(); } /** * 初始化加载View */ privatevoidinitView() { dialogLayout = (LinearLayout) findViewById(R.id.dialog_layout); dialogLayout.setOnClickListener(this); takePhotoBtn = (Button) findViewById(R.id.btn_take_photo); takePhotoBtn.setOnClickListener(this); pickPhotoBtn = (Button) findViewById(R.id.btn_pick_photo); pickPhotoBtn.setOnClickListener(this); cancelBtn = (Button) findViewById(R.id.btn_cancel); cancelBtn.setOnClickListener(this);
lastIntent = getIntent(); }
@Override publicvoidonClick(View v) { switch(v.getId()) { caseR.id.dialog_layout: finish(); break; caseR.id.btn_take_photo: takePhoto(); break; caseR.id.btn_pick_photo: pickPhoto(); break; default: finish(); break; } }
/** * 拍照获取图片 */ privatevoidtakePhoto() { //执行拍照前,应该先判断SD卡是否存在 String SDState = Environment.getExternalStorageState(); if(SDState.equals(Environment.MEDIA_MOUNTED)) {
Intent intent =newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//"android.media.action.IMAGE_CAPTURE" /*** * 需要说明一下,以下操作使用照相机拍照,拍照后的图片会存放在相册中的 * 这里使用的这种方式有一个好处就是获取的图片是拍照后的原图 * 如果不实用ContentValues存放照片路径的话,拍照后获取的图片为缩略图不清晰 */ ContentValues values =newContentValues(); photoUri =this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, photoUri); /**-----------------*/ startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); }else{ Toast.makeText(this,"内存卡不存在", Toast.LENGTH_LONG).show(); } }
/*** * 从相册中取图片 */ privatevoidpickPhoto() { Intent intent =newIntent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); }
@Override publicbooleanonTouchEvent(MotionEvent event) { finish(); returnsuper.onTouchEvent(event); }
@Override protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) { if(resultCode == Activity.RESULT_OK) { doPhoto(requestCode,data); } super.onActivityResult(requestCode, resultCode, data); }
/** * 选择图片后,获取图片的路径 * @param requestCode * @param data */ privatevoiddoPhoto(intrequestCode,Intent data) { if(requestCode == SELECT_PIC_BY_PICK_PHOTO )//从相册取图片,有些手机有异常情况,请注意 { if(data ==null) { Toast.makeText(this,"选择图片文件出错", Toast.LENGTH_LONG).show(); return; } photoUri = data.getData(); if(photoUri ==null) { Toast.makeText(this,"选择图片文件出错", Toast.LENGTH_LONG).show(); return; } } String[] pojo = {MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery(photoUri, pojo,null,null,null); if(cursor !=null) { intcolumnIndex = cursor.getColumnIndexOrThrow(pojo[0]); cursor.moveToFirst(); picPath = cursor.getString(columnIndex); cursor.close(); } Log.i(TAG,"imagePath = "+picPath); if(picPath !=null&& ( picPath.endsWith(".png") || picPath.endsWith(".PNG") ||picPath.endsWith(".jpg") ||picPath.endsWith(".JPG") )) { lastIntent.putExtra(KEY_PHOTO_PATH, picPath); setResult(Activity.RESULT_OK, lastIntent); finish(); }else{ Toast.makeText(this,"选择图片文件不正确", Toast.LENGTH_LONG).show(); } } } |
3. 上传工具类,主要实现了图片的上传,上传过程的初始化监听和上传完成的监听,还有上传耗时的计算
代码如下 | 复制代码 |
packagecom.spring.sky.image.upload.network;
importjava.io.DataOutputStream; importjava.io.File; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; importjava.net.HttpURLConnection; importjava.net.MalformedURLException; importjava.net.URL; importjava.util.Iterator; importjava.util.Map; importjava.util.UUID;
importandroid.util.Log;
/** * * 上传工具类 * @author spring sky * Email :vipa1888@163.com * QQ: 840950105 * 支持上传文件和参数 */ publicclassUploadUtil { privatestaticUploadUtil uploadUtil; privatestaticfinalString BOUNDARY = UUID.randomUUID().toString();// 边界标识 随机生成 privatestaticfinalString PREFIX ="--"; privatestaticfinalString LINE_END ="\r\n"; privatestaticfinalString CONTENT_TYPE ="multipart/form-data";// 内容类型 privateUploadUtil() {
}
/** * 单例模式获取上传工具类 * @return */ publicstaticUploadUtil getInstance() { if(null== uploadUtil) { uploadUtil =newUploadUtil(); } returnuploadUtil; }
privatestaticfinalString TAG ="UploadUtil"; privateintreadTimeOut =10*1000;// 读取超时 privateintconnectTimeout =10*1000;// 超时时间 /*** * 请求使用多长时间 */ privatestaticintrequestTime =0;
privatestaticfinalString CHARSET ="utf-8";// 设置编码
/*** * 上传成功 */ publicstaticfinalintUPLOAD_SUCCESS_CODE =1; /** * 文件不存在 */ publicstaticfinalintUPLOAD_FILE_NOT_EXISTS_CODE =2; /** * 服务器出错 */ publicstaticfinalintUPLOAD_SERVER_ERROR_CODE =3; protectedstaticfinalintWHAT_TO_UPLOAD =1; protectedstaticfinalintWHAT_UPLOAD_DONE =2;
/** * android上传文件到服务器 * * @param filePath * 需要上传的文件的路径 * @param fileKey * 在网页上xxx就是这里的fileKey * @param RequestURL * 请求的URL */ publicvoiduploadFile(String filePath, String fileKey, String RequestURL, Map if(filePath ==null) { sendMessage(UPLOAD_FILE_NOT_EXISTS_CODE,"文件不存在"); return; } try{ File file =newFile(filePath); uploadFile(file, fileKey, RequestURL, param); }catch(Exception e) { sendMessage(UPLOAD_FILE_NOT_EXISTS_CODE,"文件不存在"); e.printStackTrace(); return; } }
/** * android上传文件到服务器 * * @param file * 需要上传的文件 * @param fileKey * 在网页上xxx就是这里的fileKey * @param RequestURL * 请求的URL */ publicvoiduploadFile(finalFile file,finalString fileKey, finalString RequestURL,finalMap if(file ==null|| (!file.exists())) { sendMessage(UPLOAD_FILE_NOT_EXISTS_CODE,"文件不存在"); return; }
Log.i(TAG,"请求的URL="+ RequestURL); Log.i(TAG,"请求的fileName="+ file.getName()); Log.i(TAG,"请求的fileKey="+ fileKey); newThread(newRunnable() {//开启线程上传文件 @Override publicvoidrun() { toUploadFile(file, fileKey, RequestURL, param); } }).start();
}
privatevoidtoUploadFile(File file, String fileKey, String RequestURL, Map String result =null; requestTime=0;
longrequestTime = System.currentTimeMillis(); longresponseTime =0;
try{ URL url =newURL(RequestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(readTimeOut); conn.setConnectTimeout(connectTimeout); conn.setDoInput(true);// 允许输入流 conn.setDoOutput(true);// 允许输出流 conn.setUseCaches(false);// 不允许使用缓存 conn.setRequestMethod("POST");// 请求方式 conn.setRequestProperty("Charset", CHARSET);// 设置编码 conn.setRequestProperty("connection","keep-alive"); conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); conn.setRequestProperty("Content-Type", CONTENT_TYPE +";boundary="+ BOUNDARY); // conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
/** * 当文件不为空,把文件包装并且上传 */ DataOutputStream dos =newDataOutputStream(conn.getOutputStream()); StringBuffer sb =null; String params ="";
/*** * 以下是用于上传参数 */ if(param !=null&& param.size() >0) { Iterator while(it.hasNext()) { sb =null; sb =newStringBuffer(); String key = it.next(); String value = param.get(key); sb.append(PREFIX).append(BOUNDARY).append(LINE_END); sb.append("Content-Disposition: form-data; name=\"").append(key).append("\"").append(LINE_END).append(LINE_END); sb.append(value).append(LINE_END); params = sb.toString(); Log.i(TAG, key+"="+params+"##"); dos.write(params.getBytes()); // dos.flush(); } }
sb =null; params =null; sb =newStringBuffer(); /** * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件 * filename是文件的名字,包含后缀名的 比如:abc.png */ sb.append(PREFIX).append(BOUNDARY).append(LINE_END); sb.append("Content-Disposition:form-data; name=\""+ fileKey +"\"; filename=\""+ file.getName() +"\""+ LINE_END); sb.append("Content-Type:image/pjpeg"+ LINE_END);// 这里配置的Content-type很重要的 ,用于服务器端辨别文件的类型的 sb.append(LINE_END); params = sb.toString(); sb =null;
Log.i(TAG, file.getName()+"="+ params+"##"); dos.write(params.getBytes()); /**上传文件*/ InputStream is =newFileInputStream(file); onUploadProcessListener.initUpload((int)file.length()); byte[] bytes =newbyte[1024]; intlen =0; intcurLen =0; while((len = is.read(bytes)) != -1) { curLen += len; dos.write(bytes,0, len); onUploadProcessListener.onUploadProcess(curLen); } is.close();
dos.write(LINE_END.getBytes()); byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes(); dos.write(end_data); dos.flush(); // // dos.write(tempOutputStream.toByteArray()); /** * 获取响应码 200=成功 当响应成功,获取响应的流 */ intres = conn.getResponseCode(); responseTime = System.currentTimeMillis(); this.requestTime = (int) ((responseTime-requestTime)/1000); Log.e(TAG,"response code:"+ res); if(res ==200) { Log.e(TAG,"request success"); InputStream input = conn.getInputStream(); StringBuffer sb1 =newStringBuffer(); intss; while((ss = input.read()) != -1) { sb1.append((char) ss); } result = sb1.toString(); Log.e(TAG,"result : "+ result); sendMessage(UPLOAD_SUCCESS_CODE,"上传结果:" + result); return; }else{ Log.e(TAG,"request error"); sendMessage(UPLOAD_SERVER_ERROR_CODE,"上传失败:code="+ res); return; } }catch(MalformedURLException e) { sendMessage(UPLOAD_SERVER_ERROR_CODE,"上传失败:error="+ e.getMessage()); e.printStackTrace(); return; }catch(IOException e) { sendMessage(UPLOAD_SERVER_ERROR_CODE,"上传失败:error="+ e.getMessage()); e.printStackTrace(); return; } }
/** * 发送上传结果 * @param responseCode * @param responseMessage */ privatevoidsendMessage(intresponseCode,String responseMessage) { onUploadProcessListener.onUploadDone(responseCode, responseMessage); }
/** * 下面是一个自定义的回调函数,用到回调上传文件是否完成 * * @author shimingzheng * */ publicstaticinterfaceOnUploadProcessListener { /** * 上传响应 * @param responseCode * @param message */ voidonUploadDone(intresponseCode, String message); /** * 上传中 * @param uploadSize */ voidonUploadProcess(intuploadSize); /** * 准备上传 * @param fileSize */ voidinitUpload(intfileSize); } privateOnUploadProcessListener onUploadProcessListener;
publicvoidsetOnUploadProcessListener( OnUploadProcessListener onUploadProcessListener) { this.onUploadProcessListener = onUploadProcessListener; }
publicintgetReadTimeOut() { returnreadTimeOut; }
publicvoidsetReadTimeOut(intreadTimeOut) { this.readTimeOut = readTimeOut; }
publicintgetConnectTimeout() { returnconnectTimeout; }
publicvoidsetConnectTimeout(intconnectTimeout) { this.connectTimeout = connectTimeout; } /** * 获取上传使用的时间 * @return */ publicstaticintgetRequestTime() { returnrequestTime; }
publicstaticinterfaceuploadProcessListener{
}
} |
相关文章
- photoshop软件是一款专业的图像设计软件了,但对电脑的要求也是越高越好的,如果配置一般打开ps会比较慢了,那么photoshop打开很慢怎么办呢,下面来看问题解决办法。 1、...2016-09-14
- JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。在没给大家介绍正文之前先给分享Jquery中AJAX参...2015-11-24
- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
- 刷票行为,一直以来都是个难题,无法从根本上防止。但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制。基于 PHP,下面介绍防刷票的一些技巧:1、使用CURL进行信息伪造$ch = curl_init(); curl_setopt($ch, CURLOP...2015-11-24
- 通过本篇文章给大家介绍Sublime Text3使用技巧的相关知识,对sublime text3技巧相关知识感兴趣的朋友一起学习吧...2015-12-24
- Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
oppo r9s怎么连接电脑 oppo r9s正确连接电脑方法教程
OPPO R9s怎么打开USB调试连接电脑呢?安卓手机要连接电脑,就必须先激活开启USB调试模式,不过基于Android 6.0深度定制的ColorOS 3.0系统默认usb调试是隐藏的,初次开启需要...2016-12-21OPPO R9s如何开启Real原声技术?OPPO R9s开启Real原声技术教程
本篇文章介绍了OPPO R9s如何开启Real原声技术的方法,有需要的小伙伴可以进来看一看。 OPPO R9s如何开启Real原声技术?Real原声技术是R9s自带的音质提升技术,开启之后...2016-12-31- 本篇文章介绍了我在爬虫过程中总结的几个必备技巧,都是经过实验的,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下...2021-10-22
- 这篇文章主要介绍了分享12个非常实用的JavaScript小技巧,这些小技巧可能在你的实际工作中或许能帮助你解决一些问题,需要的朋友可以参考下...2016-05-14
- 今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说像素级完美绘制的经验技巧,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看一看。 给...2016-09-14
PHP中print_r、var_export、var_dump用法介绍
文章详细的介绍了关于PHP中print_r、var_export、var_dump区别比较以及这几个在php不同的应用中的用法,有需要的朋友可以参考一下 可以看出print_r跟var_export都...2016-11-25Framewrok7 视图介绍(views、view)使用介绍
下面我们来看一篇关于Framewrok7 视图介绍(views、view)使用介绍吧,希望这篇文章能够帮助到各位朋友。 一、Views 与View的介绍 1,Views (<div class="views">) (1)Vi...2016-10-02- 本文主要介绍了前端开发必知的15个jQuery小技巧。具有很好的参考价值,下面跟着小编一起来看下吧...2017-01-26
- PHP日志类库在低版本中我们都没有看到了但在高版本的php中就有了,下面我们来看一篇关于PHP日志类库使用详解介绍吧. Monolog遵循PSR3的接口规范,可以很轻易的替换...2016-11-25
- 这篇文章介绍了php获取当前url地址的方法小结,有兴趣的同学可以参考一下 本文实例讲述了php获取当前url地址的方法。分享给大家供大家参考,具体如下: js 获取: ...2017-01-22
- 操作命令:复制代码 代码如下:show binlog events in 'mysql-bin.000016' limit 10;reset master 删除所有的二进制日志flush logs 产生一个新的binlog日志文件show master logs; 或者 show binary logs; 查看二进制文...2014-05-31
- 1. PHP-GTK介绍 1.1 PHP-GTK PHP-GTK是PHP的延伸模组,它可以让程式设计师写出在客户端执行的、且独立的GUI的程式。这个模组不允许在浏览器上显视GTK+的程式,它一开始就...2016-11-25
- 每一行命令都是用分号(;)作为结束对于MySQL,第一件你必须牢记的是它的每一行命令都是用分号(;)作为结束的,但当一行MySQL被插入在PHP代码中时,最好把后面的分号省略掉,例如: 复制代码 代码如下: mysql_query("INSERT INTO...2015-03-15
- 在php中要获取或目录权限我们可使用fileperms函数来获取,fileperms() 函数返回文件或目录的权限,。若成功,则返回文件的访问权限。若失败,则返回 false。 例子 1 ...2016-11-25