前天手欠,打开了项目里的选图片模块,突然发现拍照和选取图片都没有问题,但是图片死活都不能显示在imageview上,真特么的日了狗了,当初为了这个功能 demo写了不下10个,而且测试也没问题了,最重要的是我什么也没有动啊,没辙,改把。流程如下:

1、从网上找了一个demo,运行没有问题,靠近项目里,日了狗了,

2、网上百度,没有。。。。。

3、群里问大神,大神说4.4的API有变化可能有影响,网上找了一个 加了一个判断,然后。。。。。再日狗。

4、大神成都-码夫小兄弟帮远程了一下。。各种改,眼花缭乱啊,最后debug,发现根本没有返回数据,兄弟仗义,晚上给弄了个demo,今天早上我下下来一看。。。。愣是没看出和我原来的代码有什么大的不同。。。。然后把代码考进去,,,,,运行,,,,麻痹日狗都不能满足我了。

5.最后发狠了   把项目里那个类的代码复制了  重新建项目贴进去,布局图片的什么都一样,运行。。。。。成功妈蛋 ,居然成功了,万头草泥马从我身上碾过去,有没有?继续--代码布局一样  唯一不同的就是清单了, android:launchMode="singleInstance"我项目类对应的清单里多了一个这个,忘记是因为什么而加上的的了,删了,运行不通,<intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

这个 加项目对应类的清单里  ,这样就一模一样了,运行成功,运行成功,运行成功,艹,成功了 成功了!但是为毛啊,码夫小兄弟说这个毛都不沾边的设置啊,擦,删了运行,奇迹的时候,又成功了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!麻痹的,不说脏话不能表现我的心情啊,,,,,,,,

总结:android:launchMode="singleInstance"应该就是这个设置出了问题,单例。网上查说这个东西的作用是保障Activity 的唯一,但是拍照等操作的时候实际上是走了3个Activity ,1、是原本的Activity 2、是拍照时或选图片的Activity 3、是返回结果到原来的Activity 。这时,问题来了。我已经设置单一了,肯定不能出去再回来了。。。。。

public class PublishActivity extends Activity {
private static final String TAG = "PublishActivity";
private static final int PHOTO_CARMERA = 1;
private static final int PHOTO_PICK = 2;

@ViewInject(R.id.iv_publish_Pic)ImageView iv_publish_Pic;
@ViewInject(R.id.iv_Camera)ImageView iv_Camera;
@ViewInject(R.id.iv_Album)ImageView iv_Album;

File file;
String picname;
SharedPreferences spf;
long currentTimeMillis;

private int width;  
private int height;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.publish);

ViewUtils.inject(this);

picname="f_"+spf.getString("_id", "")+"_"+System.currentTimeMillis()/1000 +".png";
Log.i(TAG, picname);
file=new File(Environment.getExternalStorageDirectory(), picname);

Display display = getWindowManager().getDefaultDisplay();  
width = display.getWidth();  
height = display.getHeight();

}            
/**
* 点击监听
* @param v
*/
@OnClick({R.id.iv_black_pulish,R.id.tv_wenda_pulish,R.id.tv_ok_pulish,R.id.iv_Camera,R.id.iv_Album})
public void onClick(View v){
switch (v.getId()) {
case R.id.iv_black_pulish:
startActivity(new Intent(this,PublishActivity.class));
finish();
break;
case R.id.iv_Camera:
startCamera();// 调用拍照
break;
case R.id.iv_Album:
startPick();// 调用相册
break;
}
}
// 调用系统相机
protected void startCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, PHOTO_CARMERA);
}
// 调用系统相册
protected void startPick() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent, PHOTO_PICK);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (Environment.getExternalStorageState().equals(Environment.MEDIA_UNKNOWN)) {
Toast.makeText(this, "SD卡不可用", 1000).show();
return;
}
if (resultCode == -1) {
switch (requestCode) {
case PHOTO_CARMERA:
Options options = new Options();  
options.inJustDecodeBounds = true;//设置解码只是为了获取图片的width和height值,而不是真正获取图片  
Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), options);//解码后可以options.outWidth和options.outHeight来获取图片的尺寸

int widthRatio = (int) Math.ceil(options.outWidth / width);//获取宽度的压缩比率  
int heightRatio = (int) Math.ceil(options.outHeight / height);//获取高度的压缩比率

if (widthRatio > 1 || heightRatio > 1) {//只要其中一个的比率大于1,说明需要压缩  
if(widthRatio>=heightRatio){//取options.inSampleSize为宽高比率中的最大值  
options.inSampleSize = widthRatio;  
}else{  
options.inSampleSize = heightRatio;  
}  
}

options.inJustDecodeBounds = false;//设置为真正的解码图片  
bitmap = BitmapFactory.decodeFile(file.getPath(), options);//解码图片 
iv_publish_Pic.setImageBitmap(null);
iv_publish_Pic.setImageBitmap(bitmap);
break;
case PHOTO_PICK:
if (null != data) {
setPicToView(data.getData());
}
break;
}
}

}
private void setPicToView(Uri data) {

/**
* 当选择的图片不为空的话,在获取到图片的途径  
*/
Uri uri=data;
Cursor c=getContentResolver().query(uri, null, null, null, null);
if (c.moveToNext()) {
String path=c.getString(c.getColumnIndex(Images.Media.DATA));

Log.i(tag, path);
file=new File(path);
Options options = new Options();  
options.inJustDecodeBounds = true;//设置解码只是为了获取图片的width和height值,而不是真正获取图片  
Bitmap bitmap = BitmapFactory.decodeFile(file.getPath(), options);//解码后可以options.outWidth和options.outHeight来获取图片的尺寸

int widthRatio = (int) Math.ceil(options.outWidth / width);//获取宽度的压缩比率  
int heightRatio = (int) Math.ceil(options.outHeight / height);//获取高度的压缩比率

if (widthRatio > 1 || heightRatio > 1) {//只要其中一个的比率大于1,说明需要压缩  
if(widthRatio>=heightRatio){//取options.inSampleSize为宽高比率中的最大值  
options.inSampleSize = widthRatio;  
}else{  
options.inSampleSize = heightRatio;  
}  
}

options.inJustDecodeBounds = false;//设置为真正的解码图片  
bitmap = BitmapFactory.decodeFile(file.getPath(), options);//解码图片 
Log.i(tag, file.getPath());
saveMyBitmap(bitmap,file.getName());
iv_publish_Pic.setImageBitmap(null);
iv_publish_Pic.setImageBitmap(bitmap);
}
}
public void saveMyBitmap(Bitmap mBitmap,String bitName)  {
file= new File( Environment.getExternalStorageDirectory(),picname);
Log.i(tag, file.getPath());
FileOutputStream fOut = null;
try {
fOut = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
try {
fOut.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.i("info2", "name="+file.getName()+"\n\n path="+file.getPath());
}

}

基础啊。。。。我心中的痛。。。

有别想法的大神可以留言或加群261053948指教。

Android 拍照与从相册选取图片时,图片不显示的问题相关推荐

  1. Android生成二维码--拍照或从相册选取图片

    拍照或从相册选择图片是我们日常开发中经常使用到的,可以说是必须掌握的东西.上一篇我介绍了如何生成自定义二维码<Android生成自定义二维码>,其中logo和代替黑色色块的图片都是写死的, ...

  2. Android拍照及从相册选择图片传详解(终极版)

    Android 拍照及从相册选择图片传详解 先上图 新知识点速览 URI(统一资源标识符)是标识逻辑或物理资源的字符序列,与URL类似,也是一串字符.通过使用位置,名称或两者来标识Internet上的 ...

  3. Android6.0动态设置读写权限(Android拍照或从相册中选图片预览出现问题)

    做了一个Android拍照或从相册中选图片传服务器的demo,出现了问题虽然 图片路径 也可以打印出来,然后去看权限那里也申请了读写权限 <uses-permission android:nam ...

  4. Android 拍照或从相册取图片并裁剪

    Android 拍照或从相册取图片并裁剪 转载自:http://www.cnblogs.com/w-y-f/p/4028379.html 在Android中,Intent触发Camera程序,拍好照片 ...

  5. android 仿微信选取相册_Android--选择图片(仿微信发朋友圈)第一篇

    这篇博客主要写仿微信朋友圈选择图片发朋友圈.整个功能包括加载图片,显示图片.相册文件夹.预览图片,九宫格显示已经选择好的图片等等,大概会有三篇博客. 效果图 看上面的图,加载图片肯定是异步加载,耗时任 ...

  6. AndroidStudio实现相机拍照或从相册中选取照片并显示

    AndroidStudio相机拍照或从相册中选取照片并显示 本文最大优点在于适配Android8系统,项目给的平板版本很低,系统适配折磨了我很久 找了很多方法,这个版本是最简单并且可以成功运行的 0. ...

  7. html点击文字展开图片,DIV CSS鼠标经过悬停在图片上时图片上方显示文字

    DIV CSS鼠标悬停在没有文字内容图片上时图片上方显示文字,完全是纯css div实现.CSS实现鼠标悬停放图片上方时显示美化内容. 原始图片显示没有文字在上方,当鼠标经过悬停时显示文字并且文字背景 ...

  8. 解决Typora导出文件为其他格式时图片无法显示或者发给别人

    解决Typora导出文件为其他格式时图片无法显示或者发给别人 平时用typora记笔记比较多,有很多截图便于理解,但是发现笔记发给别人的时候或者上传文件,图片总是消失,拖了好久终于把这个问题解决了 先 ...

  9. android内容提供器读取图片,android实现拍照或从相册选取图片

    从相册或拍照更换图片功能的实现:(取图无裁剪功能) 获取图片方式: (类似更换头像的效果) 1.手机拍照 选择图片: 2.相册选取图片: 本文只是简单实现该功能,页面展示有些简陋,运行效果图如下: 创 ...

最新文章

  1. JVM 内部原理(七)— Java 字节码基础之二
  2. 413 Request Entity Too Large
  3. Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
  4. debian 安装php gd2,如何在Debian Linux中为PHP安装Ioncube
  5. java中抽象类,abstract关键字
  6. php交友盲盒系统源码_免公众号已对接彩虹易支付
  7. python去重复功能_python包中的statmodels,如何处理完全重复的功能?
  8. python-字符串基础
  9. Android -- Camera.ShutterCallback
  10. linux执行多个命令_您必须知道的前50多个Linux命令
  11. url 获取 geoserver 中对应的style
  12. 动态规划——洛谷1020_导弹拦截(1999年的)
  13. Maven生命周期详解及常用命令
  14. 16S多样性组成谱研究,9.13分的Water Research轻松二连发!
  15. 两个平面之间的关系—平行、垂直、相交
  16. 谷歌Chrome浏览器离线安装包
  17. 第二章:x264视频制作meGUI工具安装
  18. 虚拟机使用cheese调用摄像头黑屏问题解决
  19. Google jib插件的使用
  20. 2021-05-27let的TDZ

热门文章

  1. 搜索引擎looka_Alook浏览器使用方法教程
  2. 【Three.js】web版 3D坦克大战
  3. 舔狗日记网站源码—附演示站点
  4. SWT/JFace 同一个Label组件中显示不同的字体和字体颜色
  5. 利用延时处理实现表单系统数据通过微信公众号自动发送消息提醒
  6. 抖音新软件测试隐藏有什么东西,抖音上苹果手机隐藏应用是怎么做到的?学会这四步你也可以隐藏!...
  7. 三菱服务器INP是什么信号,三菱电机的介绍(转载)
  8. Excel时间递增或递减
  9. mac brew和brew cask的区别
  10. Java编程案例:买飞机票