`

android > 获取图片 从 本地 /相机

 
阅读更多

T3Activity.java

 

 

package t3.com;


import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class T3Activity extends Activity {
    /** Called when the activity is first created. */

	private File sdcardTempFile;
	private int crop = 118;
	
	private ImageView imageView;
	private Button button1;
	private Button button2;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        imageView = (ImageView) findViewById(R.id.imageView);
        
        sdcardTempFile = new File("/mnt/sdcard/", "tmp_pic_" + SystemClock.currentThreadTimeMillis() + ".jpg"); 
        //=========================================================================
        
        button1 = (Button)findViewById(R.id.button1);	//from local
        button1.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) { 
				// TODO Auto-generated method stub
				Intent intent = new Intent("android.intent.action.PICK");
				intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");
				intent.putExtra("output", Uri.fromFile(sdcardTempFile));
				intent.putExtra("crop", "true");
				intent.putExtra("aspectX", 1);// 裁剪框比例
				intent.putExtra("aspectY", 1);
				intent.putExtra("outputX", crop);// 输出图片大小
				intent.putExtra("outputY", crop);
				startActivityForResult(intent, 100);
				
			}
		});
        
        
        //===================================================
        
        button2 = (Button)findViewById(R.id.button2);	//from camera
        button2.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
				intent.putExtra("output", Uri.fromFile(sdcardTempFile));
				intent.putExtra("crop", "true");
				intent.putExtra("aspectX", 1);// 裁剪框比例
				intent.putExtra("aspectY", 1);
				intent.putExtra("outputX", crop);// 输出图片大小
				intent.putExtra("outputY", crop);
				startActivityForResult(intent, 101); 
			}
		});        
        
        
    }
    
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		if (resultCode == RESULT_OK) {
			Bitmap bmp = BitmapFactory.decodeFile(sdcardTempFile.getAbsolutePath());
			imageView.setImageBitmap(bmp);
		}
	}
	
	//\\
}

 

main.xml

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView 
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"        
        />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="from local" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="from camera" />

</LinearLayout>

 

AndroidManifest.xml

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="t3.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".T3Activity"
            android:theme="@android:style/Theme.Black.NoTitleBar"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-permission android:name="android.permission.CAMERA"/>
	<uses-feature android:name="android.hardware.camera" />
	
	<uses-feature android:name="android.hardware.camera.autofocus" />
</manifest>

 

 

** 解决 某些手机在 从相机获取图片 做 裁剪的时候 报错 。

思路:  先 拍照 然后 做接收 然后 在做 裁剪 Crop 然后 再 做 接收。  但是 图片 路径最好 提前 final

 

package login.mft;



import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;

import contrl.mft.ContrlInfo;

import tab.mft.TabIndex;
import udp.mft.UdpConn;

import gloabal.mft.BitmapUtils;
import home.mft.R;
import android.app.Activity; 
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class LoginChPic extends Activity{
	private GridView gridview;  
	private String[] picArray = new String[30];
	private int picCount = 6;	//pic Count
	

	SharedPreferences sp;
	private String SYS_NAME = "bdl_switch_sys";
	
	private ImageButton getLocal;	
	private ImageButton getCamera;
	private ImageButton back;
	private static File sdcardTempFile;  
    private static int crop = 118;
    
    private int jumpId = 1;
    
    ////// dif ////////////
    private final String getIconName = "tmp_pic_" + SystemClock.currentThreadTimeMillis() + ".jpg";
    //\\\\ dif \\\\\\\\\\\\\\\\
    
	private String loginResut;
	private String localIp;
	private String DeviceIp;
	private String DeviceMac;
	private String pwd;
	private String DevicePort;    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login_pic);
		gridview = (GridView)findViewById(R.id.gridview);
		getLocal = (ImageButton)findViewById(R.id.from_local);
		getCamera = (ImageButton)findViewById(R.id.from_camera);
		back = (ImageButton)findViewById(R.id.back);
		//
		Intent intent = getIntent(); 	
		DeviceMac = intent.getStringExtra("DeviceMac"); 
		jumpId = Integer.parseInt(intent.getStringExtra("jumpId"));
		if(jumpId == 2){
			loginResut = intent.getStringExtra("loginResut");
			localIp = intent.getStringExtra("localIp");
			DeviceIp = intent.getStringExtra("DeviceIp"); 		
			pwd = intent.getStringExtra("pwd"); 
			DevicePort = intent.getStringExtra("DevicePort"); 			
		}

		//\\
        sp = getSharedPreferences(SYS_NAME, 0);          
		
		////----- from local camara  start
        sdcardTempFile = new File("/mnt/sdcard/bdl_switch/sys_icon", getIconName);   
        //=========================================================================  
         //from local  
        getLocal.setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {   
                // TODO Auto-generated method stub  
                Intent intent = new Intent("android.intent.action.PICK");  
                intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");                  
                intent.putExtra("crop", "true");  
                intent.putExtra("aspectX", 1);// 裁剪框比例  
                intent.putExtra("aspectY", 1);  
                intent.putExtra("outputX", crop);// 输出图片大小  
                intent.putExtra("outputY", crop);  
                intent.putExtra("output", Uri.fromFile(sdcardTempFile));  
                startActivityForResult(intent, 100);
                  
            }  
        });  
          
          
        //===================================================  
        //from camera  
        getCamera.setOnClickListener(new View.OnClickListener() {  
              
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");  
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(sdcardTempFile));              
                startActivityForResult(intent, 101);   
            }  
        });          
        ////----- from local camara  end
        
		for (int i = 1; i <= picCount; i++) { 
			picArray[i] = "p"+i+".png";
		}
		
		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
		for(int i=1;i<= picCount;i++){  
	            HashMap<String, String> map = new HashMap<String, String>();  
	            map.put("data",picArray[i]);  
	            listItem.add(map);  
	    }  
		LoginChPicList listItemAdapter = new LoginChPicList(LoginChPic.this, listItem);  
	           
	    gridview.setAdapter(listItemAdapter);
	    gridview.setOnItemClickListener(new ItemClickListener());   

		//\\
	    onKeyDown(0,null);  
	    
	    back.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				// TODO Auto-generated method stub
				forceBack();
			}
		});
	    
		
	}	
	class ItemClickListener implements OnItemClickListener{   
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,   
                long arg3) {   
            // TODO Auto-generated method stub   
            HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);   
            
            SharedPreferences.Editor editor = sp.edit(); 
 		    editor.putString(DeviceMac+"_icon", picArray[(arg2+1)]);
 		    editor.putString(DeviceMac+"_icon_fl", "1");
 		    editor.commit();  
 		    
 		   LoginChPic.this.finish();
           Intent intent = new Intent();
	   		switch (jumpId) {
	   		case 1:
	   			intent.setClass(LoginChPic.this, TabIndex.class);
	   			break;
	   		case 2:
				Bundle band = new Bundle();
				band.putString("loginResut", loginResut);
				band.putString("localIp", localIp);
				band.putString("DeviceIp", DeviceIp);
				band.putString("DeviceMac", DeviceMac);
				band.putString("pwd", pwd);
				band.putString("DevicePort", DevicePort);	
				intent.putExtras(band); 	   			
	   			intent.setClass(LoginChPic.this, ContrlInfo.class);
	   			break;
	   		default:
	   			intent.setClass(LoginChPic.this, TabIndex.class);
	   			break;
	   		}
           LoginChPic.this.startActivity(intent);	
 		    
        }   
       
    } 
	public void forceBack(){
		    
		   LoginChPic.this.finish();
	       Intent intent = new Intent();
	   		switch (jumpId) {
	   		case 1:
	            SharedPreferences.Editor editor = sp.edit(); 
	 		    editor.putString(DeviceMac+"_icon", "p3.png");
	 		    editor.putString(DeviceMac+"_icon_fl", "1");
	 		    editor.commit(); 		   			
	   			intent.setClass(LoginChPic.this, TabIndex.class);
	   			break;
	   		case 2:
				Bundle band = new Bundle();
				band.putString("loginResut", loginResut);
				band.putString("localIp", localIp);
				band.putString("DeviceIp", DeviceIp);
				band.putString("DeviceMac", DeviceMac);
				band.putString("pwd", pwd);
				band.putString("DevicePort", DevicePort);	
				intent.putExtras(band); 	   			
	   			intent.setClass(LoginChPic.this, ContrlInfo.class);
	   			break;
	   		default:
	   			intent.setClass(LoginChPic.this, TabIndex.class);
	   			break;
	   		}
	       LoginChPic.this.startActivity(intent);
       
       		
	}
	public boolean onKeyDown(int keyCode, KeyEvent event) {    
	       // TODO Auto-generated method stub     
	       if(keyCode == KeyEvent.KEYCODE_BACK){  
	        //Toast.makeText(LoginChPic.this, "请点击界面上的返回按钮", Toast.LENGTH_LONG).show();  
	    	   forceBack();
	    	   
	    	   return true;   
	       }    
	       return super.onKeyDown(keyCode, event);    
	   }  
	
	//\\
	@Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {  
			/////// 接收后 先 做 裁剪Crop 然后才 写  图片路径到 文件中
			
	        if (resultCode == RESULT_OK) {  
	        	if(requestCode == 101){
	        		Log.d("log","do");
	        		doCropPhoto(Uri.fromFile(sdcardTempFile));
	        }
        	
        	if(requestCode == 3021 || requestCode == 100){
                SharedPreferences.Editor editor = sp.edit(); 
     		    editor.putString(DeviceMac+"_icon", getIconName);
     		    editor.putString(DeviceMac+"_icon_fl", "0");
     		    editor.commit();             
            	
      		   LoginChPic.this.finish();
               Intent intent1 = new Intent();
    	   		switch (jumpId) {
    	   		case 1:
    	   			intent1.setClass(LoginChPic.this, TabIndex.class);
    	   			break;
    	   		case 2:
    				Bundle band = new Bundle();
    				band.putString("loginResut", loginResut);
    				band.putString("localIp", localIp);
    				band.putString("DeviceIp", DeviceIp);
    				band.putString("DeviceMac", DeviceMac);
    				band.putString("pwd", pwd);
    				band.putString("DevicePort", DevicePort);	
    				intent1.putExtras(band); 
    				
    	   			intent1.setClass(LoginChPic.this, ContrlInfo.class);
    	   			break;
    	   		default:
    	   			intent1.setClass(LoginChPic.this, TabIndex.class);
    	   			break;
    	   		}
               
               LoginChPic.this.startActivity(intent1);	        		
        	}
            
        }  
    }
	// 做 裁剪  Crop  ----------------
	protected void doCropPhoto(Uri uri) {
        Intent intent = getCropImageIntent(uri);
        startActivityForResult(intent, 3021);
    }
	public static Intent getCropImageIntent(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", crop);
        intent.putExtra("outputY", crop);
        intent.putExtra("output", Uri.fromFile(sdcardTempFile));
        return intent;
    }
	// 做 裁剪  Crop  =====================	

}

    

   

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics