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 =====================
}