精华内容
下载资源
问答
  • android调用系统相机

    千次阅读 2015-05-26 18:47:39
    首先先说明一下,鉴于网上搜android调用系统相机,得到的内容一大把都是:调用系统相机然后获得图片(网上一大把这样的东西,抄过来抄过去,有些人根本就不加以验证是否有效,很不提倡这种做法),如果需要这样功能...

    首先先说明一下,鉴于网上搜android调用系统相机,得到的内容一大把都是:调用系统相机然后获得图片(网上一大把这样的东西,抄过来抄过去,有些人根本就不加以验证是否有效,很不提倡这种做法),如果需要这样功能的请自行百度,我待会介绍的是单纯调用系统相机,但不需要获取图片。

    就单纯调用系统相机而言,先说说几个问题

    1、系统版本

    这个问题在这个帖子中说明了

    http://www.eoeandroid.com/thread-536075-1-1.html

    在不同版本的系统中,调用的方法似乎不一样,上述的方法在我的小米2S手机上试了不行

    2、大部分机型可以,其他机型目前只测试了小米和三星。

    3、机型

    我在我手机上常使用的方法是

    		ComponentName comp = new ComponentName("com.android.camera",
    				"com.android.camera.Camera");
    		intent.setComponent(comp);
    		intent.setAction("android.intent.action.VIEW");
    		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
    				| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    		startActivity(intent);

    这个方法确实可行,但是当我在nexus 5上使用时,程序崩溃了........


    无意间得到这个帖子的一点启示

    http://www.apkbus.com/android-182775-1-1.html

    可以先通过找到包名再调用相机,因为我发现,之前小米可用的那个方法虽然在别的机型上不行,但是如果Intent的Action是MediaStore.ACTION_IMAGE_CAPTURE。虽然网上很多说“调用系统相机拍照返回照片”用的都是这个,但是确实在很多机型上都可以打开相机

    于是我想到了,既然相机包名找到了,那可以通过包名启动相机

    Intent infoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    		ResolveInfo res = getPackageManager().
    				 resolveActivity(infoIntent, 0);
            if (res != null) {
            	//启动相机
            	startApplicationByPackageName(res.activityInfo.packageName);
            }

    其中startApplicationByPackageName方法如下

    //通过包名启动应用
    	private void startApplicationByPackageName(String packName)
    	{
    		PackageInfo packageInfo=null;
    		try{
    			packageInfo=getPackageManager().getPackageInfo(packName, 0);
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		if(null==packageInfo){
    			return;
    		}	
    		Intent resolveIntent=new Intent();
    		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    		resolveIntent.setPackage(packageInfo.packageName);		
    		List<ResolveInfo> resolveInfoList =getPackageManager().queryIntentActivities(resolveIntent, 0);
    		if(null==resolveInfoList){
    			return;
    		}	
    		Iterator<ResolveInfo> iter=resolveInfoList.iterator();
    		while(iter.hasNext()){
    			ResolveInfo resolveInfo=(ResolveInfo) iter.next();
    			if(null==resolveInfo){
    				return;
    			}		
    			String packageName=resolveInfo.activityInfo.packageName;
    			String className=resolveInfo.activityInfo.name;
    			Intent intent=new Intent(Intent.ACTION_MAIN);                       
    			intent.addCategory(Intent.CATEGORY_LAUNCHER);
    			intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    			ComponentName cn=new ComponentName(packageName, className);
    			intent.setComponent(cn);
    			startActivity(intent);
    		}//while
    	}//method

    考虑到三星的部分机型不吃MediaStore.ACTION_IMAGE_CAPTURE这套,但是却吃MediaStore.ACTION_IMAGE_CAPTURE_SECURE,前后只是多了一个SECURE。因此稍作修改,完整方法如下(目前我手上的机型都支持,包括Vivo、魅族、三星、锤子、小米、Nexus、索尼、HTC)

    //启动相机
    	private void launchCamera()
    	{
    		try{
    			//获取相机包名
    			Intent infoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    			ResolveInfo res = mContext.getPackageManager().
    					 resolveActivity(infoIntent, 0);
                if (res != null) 
                {
                	String packageName=res.activityInfo.packageName;
                	if(packageName.equals("android"))
                	{
                		infoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE);
    					res = mContext.getPackageManager().
    							 resolveActivity(infoIntent, 0);
    					if (res != null)
    						packageName=res.activityInfo.packageName;
                	}
                	//启动相机
                	startApplicationByPackageName(packageName);
                }
    		}
    		catch(Exception e)
    		{
    			e.printStackTrace();
    		}
    		
    	}
    
    //通过包名启动应用
    	private void startApplicationByPackageName(String packName)
    	{
    		PackageInfo packageInfo=null;
    		try{
    			packageInfo=mContext.getPackageManager().getPackageInfo(packName, 0);
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    		if(null==packageInfo){
    			return;
    		}	
    		Intent resolveIntent=new Intent();
    		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    		resolveIntent.setPackage(packageInfo.packageName);		
    		List<ResolveInfo> resolveInfoList =mContext.getPackageManager().queryIntentActivities(resolveIntent, 0);
    		if(null==resolveInfoList){
    			return;
    		}	
    		Iterator<ResolveInfo> iter=resolveInfoList.iterator();
    		while(iter.hasNext()){
    			ResolveInfo resolveInfo=(ResolveInfo) iter.next();
    			if(null==resolveInfo){
    				return;
    			}		
    			String packageName=resolveInfo.activityInfo.packageName;
    			String className=resolveInfo.activityInfo.name;
    			Intent intent=new Intent(Intent.ACTION_MAIN);                       
    			intent.addCategory(Intent.CATEGORY_LAUNCHER);
    			intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    			ComponentName cn=new ComponentName(packageName, className);
    			intent.setComponent(cn);
    			mContext.startActivity(intent);
    		}//while
    	}//method
    		




    展开全文
  • Android 调用系统相机

    2016-09-07 16:25:12
    Android 调用系统相机拍照、以及相册。完成之后图片是上传到app上。前面的功能已经测试过了。没有上传到服务器,因为我没服务器测试。但项目里面有个类可以参考上传图片到服务器,我就没测试了。接下来看代码,虽然...

    Android 调用系统相机拍照、以及相册。完成之后图片是上传到app上。前面的功能已经测试过了。没有上传到服务器,因为我没服务器测试。但项目里面有个类可以参考上传图片到服务器,我就没测试了。接下来看代码,虽然注释写得少,但其作用看英文单词意思,又在或是查看调用。
    项目源码下载地址:
    http://download.csdn.net/detail/qq_16064871/8585169

    转载请注明出处: http://blog.csdn.net/qq_16064871

    [java] view plain copy
    1. package com.example.takephotodemo;  
    2.   
    3. import java.io.File;  
    4. import java.io.IOException;  
    5. import android.media.ExifInterface;  
    6. import android.net.Uri;  
    7. import android.os.Bundle;  
    8. import android.os.Environment;  
    9. import android.provider.MediaStore;  
    10. import android.app.Activity;  
    11. import android.content.Intent;  
    12. import android.database.Cursor;  
    13. import android.graphics.Bitmap;  
    14. import android.graphics.BitmapFactory;  
    15. import android.graphics.Matrix;  
    16. import android.view.Gravity;  
    17. import android.view.LayoutInflater;  
    18. import android.view.View;  
    19. import android.view.View.OnClickListener;  
    20. import android.widget.Button;  
    21. import android.widget.ImageView;  
    22. import android.widget.PopupWindow;  
    23. import android.widget.Toast;  
    24.   
    25. public class MainActivity extends Activity implements OnClickListener {  
    26.     private ImageView mimageViewPhotoShow;  
    27.     private PopupWindow mPopupWindow;  
    28.     private View mpopview;  
    29.     private Bitmap photo;  
    30.     private File mPhotoFile;  
    31.     private int CAMERA_RESULT = 100;  
    32.     private int RESULT_LOAD_IMAGE = 200;  
    33.     private String saveDir = Environment.getExternalStorageDirectory()  
    34.             .getPath() + "/temp_image";  
    35.   
    36.     @Override  
    37.     protected void onCreate(Bundle savedInstanceState) {  
    38.         super.onCreate(savedInstanceState);  
    39.         setContentView(R.layout.activity_main);  
    40.         InitUI();  
    41.     }  
    42.   
    43.     private void InitUI() {  
    44.         View buttonChoosePhoto = (Button) findViewById(R.id.buttonChoosePhoto);  
    45.         if (buttonChoosePhoto != null) {  
    46.             buttonChoosePhoto.setOnClickListener(this);  
    47.         }  
    48.   
    49.         mimageViewPhotoShow = (ImageView) findViewById(R.id.imageViewPhotoShow);  
    50.     }  
    51.   
    52.     @Override  
    53.     public void onClick(View arg0) {  
    54.         if (arg0.getId() == R.id.buttonChoosePhoto) {  
    55.             LayoutInflater inflater = LayoutInflater.from(this);  
    56.             mpopview = inflater.inflate(R.layout.layout_login_choose_photo,  
    57.                     null);  
    58.   
    59.             mPopupWindow = new PopupWindow(mpopview, 300400true);  
    60.             mPopupWindow.setBackgroundDrawable(getResources().getDrawable(  
    61.                     R.drawable.tekephoto_dialog_background));  
    62.   
    63.             mPopupWindow.showAtLocation(mimageViewPhotoShow, Gravity.CENTER, 0,  
    64.                     0);  
    65.             Button mbuttonTakePhoto = (Button) mpopview  
    66.                     .findViewById(R.id.button_take_photo);  
    67.             Button mbuttonChoicePhoto = (Button) mpopview  
    68.                     .findViewById(R.id.button_choice_photo);  
    69.             Button mbuttonChoicecannce = (Button) mpopview  
    70.                     .findViewById(R.id.button_choice_cancer);  
    71.   
    72.             // 相册上传  
    73.             mbuttonChoicePhoto.setOnClickListener(new OnClickListener() {  
    74.                 @Override  
    75.                 public void onClick(View v) {  
    76.                     mPopupWindow.dismiss();  
    77.                     Intent i = new Intent(  
    78.                             Intent.ACTION_PICK,  
    79.                             android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  
    80.                     startActivityForResult(i, RESULT_LOAD_IMAGE);  
    81.                 }  
    82.             });  
    83.   
    84.             File savePath = new File(saveDir);  
    85.             if (!savePath.exists()) {  
    86.                 savePath.mkdirs();  
    87.             }  
    88.   
    89.             // 拍照上传  
    90.             mbuttonTakePhoto.setOnClickListener(new OnClickListener() {  
    91.                 @Override  
    92.                 public void onClick(View v) {  
    93.                     mPopupWindow.dismiss();  
    94.                     destoryImage();  
    95.                     String state = Environment.getExternalStorageState();  
    96.                     if (state.equals(Environment.MEDIA_MOUNTED)) {  
    97.                         mPhotoFile = new File(saveDir, "temp.jpg");  
    98.                         mPhotoFile.delete();  
    99.                         if (!mPhotoFile.exists()) {  
    100.                             try {  
    101.                                 mPhotoFile.createNewFile();  
    102.                             } catch (IOException e) {  
    103.                                 e.printStackTrace();  
    104.                                 Toast.makeText(getApplication(), "照片创建失败!",  
    105.                                         Toast.LENGTH_LONG).show();  
    106.                                 return;  
    107.                             }  
    108.                         }  
    109.                         Intent intent = new Intent(  
    110.                                 "android.media.action.IMAGE_CAPTURE");  
    111.                         intent.putExtra(MediaStore.EXTRA_OUTPUT,  
    112.                                 Uri.fromFile(mPhotoFile));  
    113.                         startActivityForResult(intent, CAMERA_RESULT);  
    114.                     } else {  
    115.                         Toast.makeText(getApplication(), "sdcard无效或没有插入!",  
    116.                                 Toast.LENGTH_SHORT).show();  
    117.                     }  
    118.                 }  
    119.             });  
    120.   
    121.             mbuttonChoicecannce.setOnClickListener(new OnClickListener() {  
    122.                 @Override  
    123.                 public void onClick(View v) {  
    124.                     // TODO Auto-generated method stub  
    125.                     mPopupWindow.dismiss();  
    126.                 }  
    127.             });  
    128.         }  
    129.     }  
    130.   
    131.     @Override  
    132.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    133.         super.onActivityResult(requestCode, resultCode, data);  
    134.         if (requestCode == CAMERA_RESULT && resultCode == RESULT_OK) {  
    135.             if (mPhotoFile != null && mPhotoFile.exists()) {  
    136.                 BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();  
    137.                 bitmapOptions.inSampleSize = 8;  
    138.                 int degree = readPictureDegree(mPhotoFile.getAbsolutePath());  
    139.                 Bitmap bitmap = BitmapFactory.decodeFile(mPhotoFile.getPath(),  
    140.                         bitmapOptions);  
    141.                 bitmap = rotaingImageView(degree, bitmap);  
    142.                 mimageViewPhotoShow.setImageBitmap(bitmap);  
    143.             }  
    144.         }  
    145.         if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK  
    146.                 && null != data) {  
    147.             Uri selectedImage = data.getData();  
    148.             String[] filePathColumn = { MediaStore.Images.Media.DATA };  
    149.   
    150.             Cursor cursor = getContentResolver().query(selectedImage,  
    151.                     filePathColumn, nullnullnull);  
    152.             cursor.moveToFirst();  
    153.   
    154.             int columnIndex = cursor.getColumnIndex(filePathColumn[0]);  
    155.             String picturePath = cursor.getString(columnIndex);  
    156.             cursor.close();  
    157.   
    158.             mimageViewPhotoShow.setImageBitmap(BitmapFactory  
    159.                     .decodeFile(picturePath));  
    160.         }  
    161.     }  
    162.   
    163.     private static int readPictureDegree(String path) {  
    164.         int degree = 0;  
    165.         try {  
    166.             ExifInterface exifInterface = new ExifInterface(path);  
    167.             int orientation = exifInterface.getAttributeInt(  
    168.                     ExifInterface.TAG_ORIENTATION,  
    169.                     ExifInterface.ORIENTATION_NORMAL);  
    170.             switch (orientation) {  
    171.             case ExifInterface.ORIENTATION_ROTATE_90:  
    172.                 degree = 90;  
    173.                 break;  
    174.             case ExifInterface.ORIENTATION_ROTATE_180:  
    175.                 degree = 180;  
    176.                 break;  
    177.             case ExifInterface.ORIENTATION_ROTATE_270:  
    178.                 degree = 270;  
    179.                 break;  
    180.             }  
    181.         } catch (IOException e) {  
    182.             e.printStackTrace();  
    183.         }  
    184.         return degree;  
    185.     }  
    186.   
    187.     private static Bitmap rotaingImageView(int angle, Bitmap bitmap) {  
    188.         // 旋转图片 动作  
    189.         Matrix matrix = new Matrix();  
    190.         matrix.postRotate(angle);  
    191.         System.out.println("angle2=" + angle);  
    192.         // 创建新的图片  
    193.         Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 00,  
    194.                 bitmap.getWidth(), bitmap.getHeight(), matrix, true);  
    195.         return resizedBitmap;  
    196.     }  
    197.   
    198.     @Override  
    199.     protected void onDestroy() {  
    200.         destoryImage();  
    201.         super.onDestroy();  
    202.     }  
    203.   
    204.     private void destoryImage() {  
    205.         if (photo != null) {  
    206.             photo.recycle();  
    207.             photo = null;  
    208.         }  
    209.     }  
    210. }  


    activity_main.xml

    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:orientation="vertical" >  
    6.   
    7.     <ScrollView  
    8.         android:id="@+id/scrollView1"  
    9.         android:layout_width="match_parent"  
    10.         android:layout_height="wrap_content"  
    11.         android:layout_weight="1" >  
    12.   
    13.         <LinearLayout  
    14.             android:layout_width="match_parent"  
    15.             android:layout_height="match_parent"  
    16.             android:orientation="vertical"  
    17.             android:paddingTop="20dp" >  
    18.   
    19.             <LinearLayout  
    20.                 android:layout_width="match_parent"  
    21.                 android:layout_height="match_parent"  
    22.                 android:gravity="center"  
    23.                 android:orientation="vertical" >  
    24.   
    25.                 <ImageView  
    26.                     android:id="@+id/imageViewPhotoShow"  
    27.                     android:layout_width="150dp"  
    28.                     android:layout_height="150dp"  
    29.                     android:layout_weight="1" />  
    30.             </LinearLayout>  
    31.   
    32.             <LinearLayout  
    33.                 android:layout_width="match_parent"  
    34.                 android:layout_height="match_parent"  
    35.                 android:gravity="center"  
    36.                  android:paddingTop="20dp"  
    37.                 android:orientation="vertical" >  
    38.   
    39.                 <Button  
    40.                     android:id="@+id/buttonChoosePhoto"  
    41.                     android:layout_width="100dp"  
    42.                     android:layout_height="40dp"  
    43.                     android:background="@drawable/btn_takephoto_background"  
    44.                     android:text="选择头像"  
    45.                     android:textColor="#eee"  
    46.                     android:textSize="16sp" />  
    47.             </LinearLayout>  
    48.         </LinearLayout>  
    49.     </ScrollView>  
    50.   
    51. </LinearLayout>  


    layout_login_choose_photo.xml

    [html] view plain copy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="fill_parent"  
    4.     android:layout_height="fill_parent"  
    5.     android:orientation="vertical" >  
    6.   
    7.     <TextView  
    8.         android:id="@+id/textchoice"  
    9.         android:layout_width="wrap_content"  
    10.         android:layout_height="40dp"  
    11.         android:layout_gravity="center_horizontal"  
    12.         android:gravity="center"  
    13.         android:text="请选择获取头像方式:"  
    14.         android:textAppearance="?android:attr/textAppearanceMedium"  
    15.         android:textSize="16sp" />  
    16.   
    17.     <Button  
    18.         android:id="@+id/button_take_photo"  
    19.         android:layout_width="match_parent"  
    20.         android:layout_height="40dp"  
    21.         android:layout_marginLeft="10dp"  
    22.         android:layout_marginRight="10dp"  
    23.         android:layout_marginTop="5dp"  
    24.         android:background="@drawable/btn_takephoto_background"  
    25.         android:text="拍照"  
    26.         android:textColor="#eee"  
    27.         android:textSize="16sp" />  
    28.   
    29.     <Button  
    30.         android:id="@+id/button_choice_photo"  
    31.         android:layout_width="match_parent"  
    32.         android:layout_height="40dp"  
    33.         android:layout_marginLeft="10dp"  
    34.         android:layout_marginRight="10dp"  
    35.         android:layout_marginTop="10dp"  
    36.         android:background="@drawable/btn_takephoto_background"  
    37.         android:text="从相册选择"  
    38.         android:textColor="#eee"  
    39.         android:textSize="16sp" />  
    40.   
    41.     <Button  
    42.         android:id="@+id/button_choice_cancer"  
    43.         android:layout_width="match_parent"  
    44.         android:layout_height="40dp"  
    45.         android:layout_marginLeft="10dp"  
    46.         android:layout_marginRight="10dp"  
    47.         android:layout_marginTop="10dp"  
    48.         android:background="@drawable/btn_takephoto_background"  
    49.         android:text="取消"  
    50.         android:textColor="#eee"  
    51.         android:textSize="16sp" />  
    52.   
    53. </LinearLayout>  

    NetUtil这个类,我也是参考网上的,没测试过。是图片上传服务器的。

    [java] view plain copy
    1. package com.example.takephotodemo;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.File;  
    5. import java.io.InputStream;  
    6. import java.io.InputStreamReader;  
    7. import java.util.ArrayList;  
    8. import java.util.List;  
    9. import java.util.Map;  
    10. import java.util.Set;  
    11. import org.apache.http.HttpEntity;  
    12. import org.apache.http.HttpResponse;  
    13. import org.apache.http.HttpStatus;  
    14. import org.apache.http.StatusLine;  
    15. import org.apache.http.client.HttpClient;  
    16. import org.apache.http.client.entity.UrlEncodedFormEntity;  
    17. import org.apache.http.client.methods.HttpGet;  
    18. import org.apache.http.client.methods.HttpPost;  
    19. import org.apache.http.entity.mime.MultipartEntity;  
    20. import org.apache.http.entity.mime.content.FileBody;  
    21. import org.apache.http.entity.mime.content.StringBody;  
    22. import org.apache.http.impl.client.DefaultHttpClient;  
    23. import org.apache.http.message.BasicNameValuePair;  
    24.   
    25. public class NetUtil {  
    26.     /** 
    27.      * 以POST方式提交表单 
    28.      *  
    29.      * @param url 
    30.      *            服务器路径 
    31.      * @param param 
    32.      *            参数键值对 
    33.      * @return 响应结果 
    34.      * @throws Exception 
    35.      */  
    36.     public static String doPost(String url, Map<String, Object> param)  
    37.             throws Exception {  
    38.         HttpClient client = new DefaultHttpClient();  
    39.         HttpPost post = new HttpPost(url);  
    40.         if (param != null && param.size() > 0) {  
    41.             List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(  
    42.                     param.size());  
    43.             Set<String> keys = param.keySet();  
    44.             for (Object o : keys) {  
    45.                 String key = (String) o;  
    46.                 nameValuePairs.add(new BasicNameValuePair(key, String  
    47.                         .valueOf(param.get(key))));  
    48.             }  
    49.             post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));  
    50.         }  
    51.         HttpResponse response = client.execute(post);  
    52.         /** 返回状态 **/  
    53.         int statusCode = response.getStatusLine().getStatusCode();  
    54.         StringBuffer sb = new StringBuffer();  
    55.         if (statusCode == HttpStatus.SC_OK) {  
    56.             HttpEntity entity = response.getEntity();  
    57.             if (entity != null) {  
    58.                 InputStream instream = entity.getContent();  
    59.                 BufferedReader br = new BufferedReader(new InputStreamReader(  
    60.                         instream));  
    61.                 String tempLine;  
    62.                 while ((tempLine = br.readLine()) != null) {  
    63.                     sb.append(tempLine);  
    64.                 }  
    65.             }  
    66.         }  
    67.         post.abort();  
    68.         return sb.toString();  
    69.     }  
    70.   
    71.     /** 
    72.      *  
    73.      *  
    74.      * @param url 
    75.      * @param param 
    76.      * @param file 
    77.      * @return  
    78.      * @throws Exception 
    79.      */  
    80.     private String doPost(String url, Map<String, String> param, File file)  
    81.             throws Exception {  
    82.         HttpPost post = new HttpPost(url);  
    83.   
    84.         HttpClient client = new DefaultHttpClient();  
    85.         MultipartEntity entity = new MultipartEntity();  
    86.         if (param != null && !param.isEmpty()) {  
    87.             for (Map.Entry<String, String> entry : param.entrySet()) {  
    88.                 entity.addPart(entry.getKey(), new StringBody(entry.getValue()));  
    89.             }  
    90.         }  
    91.         // 添加文件参数  
    92.         if (file != null && file.exists()) {  
    93.             entity.addPart("file"new FileBody(file));  
    94.         }  
    95.         post.setEntity(entity);  
    96.         HttpResponse response = client.execute(post);  
    97.         int stateCode = response.getStatusLine().getStatusCode();  
    98.         StringBuffer sb = new StringBuffer();  
    99.         if (stateCode == HttpStatus.SC_OK) {  
    100.             HttpEntity result = response.getEntity();  
    101.             if (result != null) {  
    102.                 InputStream is = result.getContent();  
    103.                 BufferedReader br = new BufferedReader(  
    104.                         new InputStreamReader(is));  
    105.                 String tempLine;  
    106.                 while ((tempLine = br.readLine()) != null) {  
    107.                     sb.append(tempLine);  
    108.                 }  
    109.             }  
    110.         }  
    111.         post.abort();  
    112.         return sb.toString();  
    113.     }  
    114.   
    115.     private String doGet(String url) {  
    116.         StringBuilder sb = new StringBuilder();  
    117.         try {  
    118.             HttpGet get = new HttpGet(url);  
    119.             // HttpPost post = new HttpPost(url);  
    120.   
    121.             HttpClient client = new DefaultHttpClient();  
    122.             HttpResponse response = client.execute(get);  
    123.             StatusLine state = response.getStatusLine();  
    124.             if (state.getStatusCode() == HttpStatus.SC_OK) {  
    125.                 HttpEntity eneity = response.getEntity();  
    126.                 BufferedReader br = new BufferedReader(new InputStreamReader(  
    127.                         eneity.getContent()));  
    128.                 String content;  
    129.                 while ((content = br.readLine()) != null) {  
    130.                     sb.append(content);  
    131.                 }  
    132.             }  
    133.             get.abort();  
    134.         } catch (Exception e) {  
    135.             e.printStackTrace();  
    136.             return sb.toString();  
    137.         }  
    138.         return sb.toString();  
    139.     }  
    140. }  

    记得加入权限,权限主要是访问sd存储,以及调用系统相机,相册。上传服务器权限也有了。只是我没服务器测试。

    [html] view plain copy
    1. <uses-permission android:name="android.permission.CAMERA" />  
    2. <uses-permission android:name="android.permission.INTERNET" />  
    3. <uses-permission android:name="android.permission.VIBRATE" />  
    4. <uses-permission android:name="android.permission.INTERNET" />  
    5. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    6. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


    项目源码下载地址:http://download.csdn.net/detail/qq_16064871/8585169

    转载请注明出处: http://blog.csdn.net/qq_16064871

    展开全文
  • Android调用系统相机

    2017-06-27 23:24:03
    所以接下来我们会学习一下调用系统相机拍摄照片的简单使用。  调用系统相机并返回数据的方式有两种:1)指定图片保存的路径;2)使用默认的图片保存路径; 下面是两种方式效果截图:    图1 指定图片保存...
    1.概述
    
        在大多数应用开发中,我们并不需要自己去写一个自定义的相机拍摄和预览功能,这个时候我们只需要调用系统的摄像头接收它拍摄后为我们返回的数据即可。所以接下来我们会学习一下调用系统相机拍摄照片的简单使用。
        调用系统相机并返回数据的方式有两种:1)指定图片保存的路径;2)使用默认的图片保存路径;  下面是两种方式效果截图:
     
        图1 指定图片保存的路径效果                                     图2 使用默认的图片保存路径效果    

    明显两种方式返回的图片不一样大小,图2 图片很小的原因是系统在照片返回的时候对它进行了压缩。

    好了接下来是我们调用系统相机的实现步骤。

    2.实现

        2.1 manifest文件注册权限:
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permisssion.CAMERA"/>
        
        2.2 activity_main.xml布局文件:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns: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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.elimy.camera.MainActivity">
     
    <ImageView
    android:src="@mipmap/ic_launcher"
    android:id="@+id/pic"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
    <Button
    android:id="@+id/startCamera"
    android:text="调用系统相机"
    android:layout_below="@id/pic"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
    </RelativeLayout>

        2.3 MainActivity.java布局类文件:
    package com.example.elimy.camera;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Environment;
    import android.provider.MediaStore;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
     
    import java.io.File;
    import java.io.IOException;
     
    public class MainActivity extends AppCompatActivity {
     
    public static final int REQUEST_TAKE_PHOTO_CODE=1;
    public static final int REQUST_TAKE_PHOTTO_CODE2=2;
    private ImageView imageView;
    Button startbtn;
    // /storage/emulated/0/pic
    public final static String SAVED_IMAGE_PATH1=Environment.getExternalStorageDirectory().getAbsolutePath()+"/pic";//+"/pic";
    // /storage/emulated/0/Pictures
    public final static String SAVED_IMAGE_PATH=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath();//.getAbsolutePath()+"/pic";//+"/pic";
    String photoPath;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     
     
    Log.d("SAVED_IMAGE_PATH1",SAVED_IMAGE_PATH1);
    Log.d("SAVED_IMAGE_PATH",SAVED_IMAGE_PATH);
     
    //布局初始化绑定
    imageView = (ImageView) findViewById(R.id.pic);
    startbtn = (Button) findViewById(R.id.startCamera);
     
    //调用按钮监听
    startbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     
    //获取SD卡安装状态
    String state= Environment.getExternalStorageState();
    if (state.equals(Environment.MEDIA_MOUNTED)){
     
    //设置图片保存路径
    photoPath=SAVED_IMAGE_PATH+"/"+System.currentTimeMillis()+".png";
     
    File imageDir=new File(photoPath);
    if(!imageDir.exists()){
    try {
    //根据一个 文件地址生成一个新的文件用来存照片
    imageDir.createNewFile();
     
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    takePhotoByMethod1();
    //takePhotoByMethod2();
    }else {
    Toast.makeText(MainActivity.this,"SD卡未插入",Toast.LENGTH_SHORT).show();
    }
     
    }
    });
     
    }
     
    /*
    * 接收调用相机后返回的数据
    * */
    @Override
    public void onActivityResult(int requestCode,int resultCode,Intent data){
    if (requestCode==REQUEST_TAKE_PHOTO_CODE&&resultCode==Activity.RESULT_OK){
    File photoFile=new File(photoPath);
    if (photoFile.exists()){
    //通过图片地址将图片加载到bitmap里面
    Bitmap bm= BitmapFactory.decodeFile(photoFile.getAbsolutePath());
    //将拍摄的照片显示到界面上
    imageView.setVisibility(View.VISIBLE);
    imageView.setImageBitmap(bm);
    }else {
    Toast.makeText(MainActivity.this,"图片文件不存在",Toast.LENGTH_LONG).show();
    }
    }else if (requestCode==REQUST_TAKE_PHOTTO_CODE2&&resultCode==Activity.RESULT_OK){
    Bundle bundle=data.getExtras();
    if (bundle!=null){
    Bitmap bm= (Bitmap) bundle.get("data");
    if (bm!=null){
    imageView.setVisibility(View.VISIBLE);
    imageView.setImageBitmap(bm);
    }
    }else {
    Toast.makeText(MainActivity.this,"没有压缩的图片数据",Toast.LENGTH_LONG).show();
    }
    }
    }
    /*
    * 第一种方式调用系统摄像头拍照
    * */
    private void takePhotoByMethod1(){
    //实例化intent,指向摄像头
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //根据路径实例化图片文件
    File photoFile=new File(photoPath);
    //设置拍照后图片保存到文件中
    intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));
    //启动拍照activity并获取返回数据
    startActivityForResult(intent,REQUEST_TAKE_PHOTO_CODE);
    }
    /*
    * 第二种方式调用系统摄像头拍照
    * */
    private void takePhotoByMethod2(){
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent,REQUST_TAKE_PHOTTO_CODE2);
    }
     
    }
        
        系统相机的调用还是比较简单,唯一要注意的的是第一种方法中的图片保存路径必须设置好,不然会有照片拍摄后无法点击确认返回并保存的问题。


    展开全文
  • Android调用系统照相机

    2018-02-11 12:33:34
    调用系统相机和相册上传图片的流程:1.点击一个按钮触发调用操作。case R.id.photograph: // 拍照 photograph.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ...

    调用系统相机和相册上传图片的流程:

    1.点击一个按钮触发调用操作。

    case R.id.photograph:
        // 拍照
        
    photograph.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");//调用系统照相机的代码
                // 2判断存储卡是否可以用,可用进行存储
                
    String tempFileName = "";
                if(type == 1){
                    tempFileName = IMAGE_FRONT;
                }else if(type == 2){
                    tempFileName = IMAGE_BACK;
                }else if(type == 3){
                    tempFileName = IMAGE_HANDS;
                }
          //3从内存卡读取存储的照片,传给请求照片的页面     

     if (hasSdcard()) {
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
                            .fromFile(new File(Environment
                                    .getExternalStorageDirectory(),
                                    tempFileName)));
                }
                startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
            }
        });

    //4用onActivityResult()方法根据不同的请求码保存获得的图片

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) { // resultCode == RESULT_OK表示系统返回的是否成功的判断码


            switch (requestCode) {
                case PHOTO_REQUEST_CAMERA:
                    setResult(2001,data);//5用setResult方法把图片保存起来,2001为结果码,data为图片数据。
                    finish();//6.该方法一定要写
                    break;
                case PHOTO_REQUEST_GALLERY:
                    setResult(2002,data);
                    finish();
                    break;
            }
        }

    //7返回前一个界面,根据结果码显示图片。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        try {
            //选择图片
            
    if (resultCode == 2002 && data != null) {
                Uri uri = data.getData();
                crop(uri);//8对选择的图片进行裁剪
            } else if (requestCode == PHOTO_REQUEST_CUT) { //裁剪
                
    if (data == null)
                    return;
                         if (type == 1) {
         //9把选择的图片显示到指定的控件上。           

    XGlide.init(this).display(iv_front, outFrontUri);                

    //10,根据图片的Uri,获得其在文件系统中的路径

    frontImagePath = getRealFilePath(ApplyAgentActivity.this, outFrontUri);
                } else if (type == 2) {
                    XGlide.init(this).display(iv_back2, outBackUri);
                    backImagePath = getRealFilePath(ApplyAgentActivity.this, outBackUri);
                } else if (type == 3) {
                    XGlide.init(this).display(iv_img, outHandUri);
                    handleImagePath = getRealFilePath(ApplyAgentActivity.this, outHandUri);
                }
            } else if(resultCode == 2001){ //拍照
                          
    File tempFile = null;
                if (hasSdcard()) {
                    if (type == 1) {
                       tempFile = new File(
                                Environment.getExternalStorageDirectory(),//访问sd卡APP专属文件中照片
                                
    IMAGE_FRONT);
                    } else if (type == 2) {
                        tempFile = new File(
                                Environment.getExternalStorageDirectory(),
                                IMAGE_BACK);
                    } else if (type == 3) {
                        tempFile = new File(
                                Environment.getExternalStorageDirectory(),
                                IMAGE_HANDS);
                    }
                    crop(Uri.fromFile(tempFile));
                } else {
                    showTips("未找到存储卡,无法存储照片!", null);
                }
            }
        } catch (Exception e) {

        }
    }

     

    根据图片的Uri,获得其在文件系统中的路径的方法

    public String getRealFilePath(final Context context, final Uri uri) {
        if (null == uri)
            return null;
        final String scheme = uri.getScheme();
        String data = null;
        if (scheme == null)
            data = uri.getPath();
        else if (ContentResolver.SCHEME_FILE.equals(scheme)) {
            data = uri.getPath();
        } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
            Cursor cursor = context.getContentResolver().query(uri,
                    new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
            if (null != cursor) {
                if (cursor.moveToFirst()) {
                    int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
                    if (index > -1) {
                        data = cursor.getString(index);
                    }
                }
                cursor.close();
            }
        }
        return data;
    }

     

    图片自由裁剪
    /**
     * 裁剪图片
     */
    private void crop(Uri uri) {
        outFile = new File(sd, "tsxn" + SystemClock.currentThreadTimeMillis()
                + ".png");
        if (type == 1) {
            outFrontUri = Uri.fromFile(outFile);
            outUri = outFrontUri;
        } else if (type == 2) {
            outBackUri = Uri.fromFile(outFile);
            outUri = outBackUri;
        } else if (type == 3) {
            outHandUri = Uri.fromFile(outFile);
            outUri = outHandUri;
        }
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        // 裁剪框的比例,1:1
        
    intent.putExtra("aspectX", 1); X方向上的比例
        intent.putExtra("aspectY", 1); Y方向上的比例
        // 裁剪后输出图片的尺寸大小
        
    intent.putExtra("outputX", 480); 裁剪区的宽
        intent.putExtra("outputY", 480); 裁剪区的高
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outUri);// URI指向相应的file
        // 图片格式
        
    intent.putExtra("outputFormat", "png");
        intent.putExtra("noFaceDetection", true);// 取消人脸识别
        
    intent.putExtra("return-data", true);// 是否将数据保留在Bitmap中返回    startActivityForResult(intent, PHOTO_REQUEST_CUT);
    }

     

     

    从内存卡中读取照片的步骤

    android 读取sd卡中的图片

    一、mainfest获取读取SD卡的权限

     

    <!--在SDCard中创建与删除文件权限  -->

        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

        <!-- 往SDCard写入数据权限 -->

        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

        <!--  从SDCard读取数据权限 -->

        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

     

    二、找到SD卡的目录

    /**

         * Environment.getExternalStorageDirectory()得到:“、mnt/sdcard” 即找到了sd卡的根目录

         */

        private String path=Environment.getExternalStorageDirectory()+"client/tile/1.jpg";

    三、根据路径获取图片

    File mFile=new File(path);

            //若该文件存在

            if (mFile.exists()) {

                Bitmap bitmap=BitmapFactory.decodeFile(path);

                return bitmap;

            }

    注意:

    在读取sd卡中图片的过程中的一些可用判断

    1

     

    /***有些时候我们的手机没有安装SD        

    if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { String path=Environment.getExternalStorageDirectory().getPath();

            }

     

    2、获取SD卡权限成功

     

    private String path=Environment.getExternalStorageDirectory()+"client";

        File file=new File(path);

    if (file.canRead()) {

                Log.v("TAG", "可读");

            }

            if (file.canWrite()) {

                Log.v("TAG", "可写");

            }

     

    是时候弄清楚getExternalStorageDirectory()getExternalFilesDir()的区别了

    App专属文件 vs App独立文件

    app专属文件就是那些只有该app才可以使用的文件,例如专属格式的电子书,这类文件当我们删除应用之后,还应该保留在手机上的,例如拍照的照片,不应该随着删除应用而被删除掉。对于这类文件,Android给我们提供了特定的目录这些目录都是以DIRECTORY开头的,例如:DIRECTORY_MUSIC , DIRECTORY_PICTURES.

    访问APP专属文件夹有两种方式:

    第一种:

    File sdCard = Environment.getExternalStorageDirectory();

    File directory_pictures = new File(sdCard, "Pictures");

    第二种:

    File directory_pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

    app独立文件就是那些不依赖于某特定app的文件,例如照片。这类文件应该是随着app删除而一起删除的,它们可以被存储在两个地方:internal storage external storage internal storage就是手机自带的一块存储区域,通常很小;external storage就是通常所说的SD卡,通常很大,有16GB,32GB等。internal storage很小,所以你就应该很正确的使用它,因为SD卡有可能会被用户卸下,换成新的,所以SD卡不是任何时间都可用的,因此我们必须将一些重要的数据库文件以及一些用户配置文件存放在internal storage中。将一些大的图片或文件等缓存放到external storage这是你app私有的目录,你的shared preference文件,数据库文件,都存储在这里。目录为data/data/< package name >/files/ 
    访问方法为:

     File filesDir = getFilesDir();

    获得这个路径的方法:

     File externalFilesDir = getExternalFilesDir(null);

    添加权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    File externalFilesDir = getExternalFilesDir("Caches");

    Android MediaStore

    MediaStore这个类是android系统提供的一个多媒体数据库android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了

     

    展开全文
  • android 调用系统相机

    2016-05-27 07:17:00
    // 调用相机拍照的请求码 public static final int REQUEST_TAKE_PHOTO_CODE = 1; public static final int REQUEST_TAKE_PHOTO_CODE2 = 2; // 拍照后显示图片的ImageView private void startTakePhoto2()...
  • Android调用系统照相机并保存
  • 本文主要介绍Android 调用系统照相机拍照和录像的资料,这里整理了详细的代码,有需要的小伙伴可以参考下
  • [java] view plaincopyprint? package com.b509.activity.patient;    import java.io.File;  import java.io.FileNotFoundException;  import java.io....import java.io
  • Android调用系统照相机

    2012-08-12 19:36:34
    1)起Intent captrueIntent=new Intent(android.provider.mediastore.ACTION_IMAGE_CAPTURE); 2)context.startActivityForResult(captrueIntent,0);-->当系统拍照完毕后会有回调onActivityResult出现 3)在...
  • Android 调用系统相机拍照攻略(已适配Android N)  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,094
精华内容 837
关键字:

android调用系统相机