手机就把这种图片无意中的交换了老婆改成始终怎么办?始终发送更改过来

手机丢了咋找回来?教你几招(组图)_网易新闻
手机丢了咋找回来?教你几招(组图)
用微信扫码二维码
分享至好友和朋友圈
安装防盗APP可以在手机丢失后远程删除重要资料开启苹果手机“丢失模式”,手机将被锁定丢失手机定位移动轨迹  “有了手机以后就很少记电话号码了,这手机一丢,所有的好友、同事就都联系不上了。”“我手机上的微信、QQ都是自动登录的,还绑定了支付宝、银行卡,若是被盗用了,岂不损失更大。”“手机里存了不少家人、同事发来的短信、微信,不免涉及到隐私,还有相册里的自拍照,要是被公布出来可怎么办?”
  手机在人们的生活中扮演着越来越重要的角色,比起手机丢失硬件本身的财产损失,人们更加担心以手机为纽带的信息、人脉的损失与断裂。
  前几天,太原市民程先生在微博上晒出一组照片称,在苹果“防盗模式”的帮助下,手机失而复得。这条微博引起不少群友好奇询问,什么样的手机丢了都能找回么?连日来,记者进行了走访。
  很多手机都自带“防盗模式”你的开启了吗?
  “手机拿回来了!晋AT…好人啊!定位和丢失模式真的好赞!”前几天,太原市民程先生在微博上晒出一组照片称,在苹果“防盗模式”的帮助下,手机失而复得。
  晚上8时50分左右,程先生打车回到家,才惊觉自己的iphone5c手机落在了出租车上,想到苹果手机里有“查找我的iphone”功能,通过定位,说不定能找回来。于是他在电脑上登录,通过 ID和密码,开启了“丢失模式”,地图上就出现了手机所在的位置,“这个小灰点一直在动,我想应该还在出租车上。”程先生告诉记者。
  程先生反复拨打自己的手机,出租车司机接起电话,告知他现在正在出车,送完客人就把手机送回去。晚上10时左右,丢失了一个多小时的手机又回到了小程手里。小程把这件事发到微博上是想提醒更多的“马大哈”用好手机的功能。
  这种模式是苹果特有的,还是任何手机都具备?10月27日,记者采访了手机经销商负责人石先生。据他介绍,此类“防盗功能”大多智能手机都可以实现,通过申请手机账户如 ID,开启手机设置中的“手机查找”,手机丢失后可在电脑上打开手机云客户端,远程定位、锁定手机,如苹果的“查找我的iPhone”,小米的“手机查找”,“只要确保开启状态,就能提高手机寻回的几率。”
  安装“防盗APP”能未雨绸缪还能远程销毁资料
  石先生介绍,除了手机自身的“防盗系统”,在手机上安装如“腾讯手机管家”“360手机卫士”等APP,也可以提高手机失而复得的几率,还可以保护手机信息。“360手机卫士的防盗功能可以在手机重新插进一张SIM卡后迅速收到新卡号码。”石先生说,安装360手机卫士APP后,打开软件设置防盗密码,并绑定安全号码,如果手机被盗,一旦有新的SIM卡插进手机,绑定的安全号码就会收到显示新的手机卡号码的短信。
  安装此类APP除了可以定位和锁定手机,更重要的是它拥有清空数据、冻结QQ、微信等账号的功能,如此一来即便寻不回丢失手机,也可以保护私人信息不被泄露。石先生带记者体验了“腾讯手机管家”。下载APP并保持定位处于开启状态,设置用户名及密码。
  在“腾讯手机管家”的电脑官网上登录用户名密码,选择丢失的手机型号及手机号码,分别点击“手机定位”“手机锁定”“清空数据”,登录的手机就会被锁定,手机通讯录、照片等重要资料被删除,并且能在地图上显示手机的大概位置。
  请警方运营商来帮忙用“ICCID法”专业找回
  不过,智能手机“防盗模式”以及各种“防盗软件”,都需要远程指令控制,受到的限制条件太多。如果丢失的手机未联网、处于飞行模式、被恢复出厂设置、手机管家被卸载等,这些指令就难以发出,也就难以找回手机。
  石先生介绍,还有一种概率相对高一些的寻回办法“ICCID法”,淘宝中的“手机专业找回”团队用的就是这一方法。要使用“ICCID法”,必须先明白两个概念,一个是串号,IMEI,由15位数字组成,它是每只手机惟一的身份标识号码;另一个是IC-CID,每张SIM卡所对应的一串20位数字,是手机卡的身份标识。
  “找回iPhone的服务会根据查询次数以及是否能查询到维修地址而收费。因此使用‘ICCID法’找回苹果手机需要购买服务,在向商家提供序列号后,商家会给予自主查询的网站或者提供给你机器的信息。”石先生说,手机刷机后重新激活时,会将所用SIM卡编码(即ICCID)上传至苹果服务器。根据这个原理,就可以通过IMEI,查询手机的ICCID号码是否已经更改,以判断是否已经被刷机。如果被刷机,可以通过查找刷机时使用卡的ICCID,请运营商(移动、联通或者电信)帮忙查找对应的号码,或者联系商家提供刷机时的维修地址,请警方帮忙,找回手机。
  实习生 刘聪
  作者:进行了走访。
本文来源:山西新闻网-山西晚报
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈Camera的学习,图片的保存(两种),获取手机图片以及图片信息修改(小的图片浏览器) - CSDN博客
Camera的学习,图片的保存(两种),获取手机图片以及图片信息修改(小的图片浏览器)
在Android上,可以通过使用意图来使用设备上的某些软件。所有带有合适硬件(摄像头)的原版Android都会带有照相功能的应用程序。Camera应用程序中包含了一个意图过滤器,它使得我们可以通过意图调用系统应用,而不需要我们自己编写。意图过滤器是程序员用于指定程序能够提供某个特定功能的一种方法。在应用程序的AndroidManifest.xml文件中制定一个意图过滤器,将会告诉Android,这个应用程序将根据这个指令执行特定的任务。
Camera应用中指定了一下意图过滤器
&intent-filter&
&action android:name=&android.media.action.IMAGE_CAPTURE&/&
&category android:name=&android.intent.category.DEFAULT&/&
&/intent-filter&
所以我们可以通过意图调用系统照相应用程序
Intent intent=new Intent(&android.media.action.IMAGE_CAPTURE&);或
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTRUE);(推荐使用)
startActivity(intent);
以上两种任选一种
虽然我们现在可以调用系统拍照程序,但是这样毫无意义,我们还应该得到它的返回数据(图片)
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTRUE);(推荐使用)
startActivityForResult(intent);
这样开启拍照程序我们能通过重写onActivityResult()方法获取返回的数据(bitmap对象....)
完整代码如下所示
&span style=&font-size:14&&package com.example.
import android.app.A
import android.content.I
import android.graphics.B
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ImageV
public class MainActivity extends Activity implements OnClickListener{
public static final int REQUEST_CODE=0;
private Button paizhaoBt;
private ImageView photoIv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
private void initListener() {
paizhaoBt.setOnClickListener(this);
private void initView() {
paizhaoBt=(Button) findViewById(R.id.paizhao);
photoIv=(ImageView) findViewById(R.id.photo_iv);
public void onClick(View v) {
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
//Camera返回给我们的附加数据
Bundle bundle=data.getExtras();
//从附加值中获取bitmap对象
Bitmap bitmap=(Bitmap) bundle.get(&data&);
//使用setImageBitmap将照片显示在界面上
photoIv.setImageBitmap(bitmap);
&/span&&span style=&font-size:14&&&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:orientation=&vertical& &
android:id=&@+id/paizhao&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&拍照& /&
&ImageView
android:id=&@+id/photo_iv&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:src=&@drawable/ic_launcher& /&
&/LinearLayout&&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:orientation=&vertical& &
android:id=&@+id/paizhao&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&拍照& /&
&ImageView
android:id=&@+id/photo_iv&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:src=&@drawable/ic_launcher& /&
&/LinearLayout&&/span&
当运行以上程序得到的图片很小,它是被处理过了的。当通过一个意图触发时,Camera应用程序不会将原图返回给调用程序,因为这样需要消耗大量的内存,返回的是一幅缩略图
那么如何获取原始图片并显示在手机上呢
1.图片保存
从Android1.5开始,在大多数设备上可以将一个附加值传递给触发Camera应用程序的意图,MediaStore类中的EXTRA_OUTPUT常量,这个附加值常量将以URI的方式封装图片的保存路径,将图片以文件的方式存储起来。
//获取根路径
File root=Environment.getExternalStorageDirectory();
//保存的图片文件
imageFile=new File(root, &test.jpg&);
Uri uri=Uri.fromFile(imageFile);
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE);
通过以上代码如果照相完成,图片将保存到imageFile文件中
2.图片显示
因为原始图片较大,加载到程序会耗内存,我们必须先将其压缩,Android中提供了BitmapFactory这个类对bitmap对象进行处理
例如: BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=8;
BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
photoIv.setImageBitmap(bitmap);
上诉代码是将图片大小压缩到原始图片的1/8,这种没有考虑图片的原始大小和屏幕大小,为了适应屏幕我们计算出一个压缩比率,再进行压缩
完整代码如下
&span style=&font-size:14&&package com.example.
import java.io.F
import android.app.A
import android.content.I
import android.graphics.B
import android.graphics.BitmapF
import android.net.U
import android.os.B
import android.os.E
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ImageV
public class MainActivity extends Activity implements OnClickListener{
public static final int REQUEST_CODE=0;
private Button paizhaoBt;
private ImageView photoIv;
private File imageF
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
private void initListener() {
paizhaoBt.setOnClickListener(this);
private void initView() {
paizhaoBt=(Button) findViewById(R.id.paizhao);
photoIv=(ImageView) findViewById(R.id.photo_iv);
public void onClick(View v) {
//获取根路径
File root=Environment.getExternalStorageDirectory();
//保存的图片文件
imageFile=new File(root, &test.jpg&);
Uri uri=Uri.fromFile(imageFile);
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
//获取屏幕宽高
int screenWidth=getWindowManager().getDefaultDisplay().getWidth();
int screenHeight=getWindowManager().getDefaultDisplay().getHeight();
//获取图片的宽高
BitmapFactory.Options options=new BitmapFactory.Options();
//只返回图片的范围大小,不解码图片本身
options.inJustDecodeBounds=
BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
int imgWidth=options.outW
int imgHeight=options.outH
//求压缩比率,取整
int widthRadio=(int) Math.ceil(imgWidth/screenWidth);
int heightRadio=(int) Math.ceil(imgHeight/screenHeight);
//那个比率大的,作为压缩比率
options.inSampleSize=widthRadio&heightRadio?widthRadio:heightR
//解码图片
options.inJustDecodeBounds=
Bitmap bitmap=BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);
photoIv.setImageBitmap(bitmap);
&span style=&font-size:14&&&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:orientation=&vertical& &
android:id=&@+id/paizhao&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&拍照& /&
&ImageView
android:id=&@+id/photo_iv&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:src=&@drawable/ic_launcher& /&
&/LinearLayout&&/span&
上面我们将拍照后的图片存储到sdcard中的文件中,下面我们学习将图片存储到MediaStore中(获取图片标准路径并存储)
Android有一种在应用程序之间共享数据的方法,负责这个功能的类为内容提供者ContentProvider,内容提供者为不同类型数据的存储和检索提供了一个标准接口。
图像、音频、视频的标准内容提供者为MediaStore。MediaStore在设备上的一个标准位置存放文件,为存储和检索该文件的元数据提供便利 。什么是元数据呢?元数据是关于数据的数据,包括文件本身的数据信息,如大小名称等
和上面一样,我们要先获取图片的uri(图片存储位置)
为了获取存储图片的标准位置,首先获得MediaStore(内容提供者)的引用。使用内容解析者(ContentResolver)访问内容提供者(MediaStore)
这里我们需要传递一个特定的URI,使用的URI包含在android.provider.MediaStore.Images.Media类中的常量
1.EXTERNAL_CONTENT_URI将图片存储到外部存储器中
2.INTERNAL_CONTENT_URI将图片存储到内存中
存储图片,视频,音频等内容比较大,推荐使用第一种方式存储
由于是插入一张新图片到内容提供者所以要用insert方法
Uri uri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,new ContentValues());
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTRUE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,uri);
在上述代码中创建了一个ContentValues对象,该对象用于保存我们在创建图片时相关联的元数据,这里我们传入了一个空对象
下面我们给ContentValues对象中添加数据,ContentValues对象存储着名值对数据
名:主要是android.provider.MediaStore.Images.Media类中的常量(这些常量位于MediaStore.MediaColumns中,由Media类实现该接口)
ContentValues values=new&ContentValues(3);
values.put(Media.DIAPLAY_NAME,&TEXT&);//图片名字
values.put(Media.DESCRIPTION,&TEXT&);//图片描述
values.put(Media.MIME_TYPE,&image/jpeg&);//文件类型
//添加一条新纪录。insert方法返回新纪录的uri
Uri uri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,values);
返回的URI,将通过意图传递给Camera应用程序,以指定该图像应该保存的位置
URI格式:content://media/external/images/media/16
下面我们怎样来找到刚刚存储到MediaStore中的图片呢?
同保存到sdcard中的图片一样,我们同样要使用到BitmapFactory这个类,来解析图片
Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(uri),null,options);
这里我们是通过内容解析者为图片打开一个Inputstream,然后通过BitmapFactory对流解析
那么以后我们要对图片数据进行修改怎么办呢?
内容解析者为我们提供了update方法,可以对数据进行修改更新
ContentValues values=new&ContentValues(3);
values.put(Media.DIAPLAY_NAME,&hehe&);//图片名字
values.put(Media.DESCRIPTION,&hehe&);//图片描述
getContentResolver().update(uri,values,null,null);
完整代码如下
&span style=&font-size:14&&package com.example.
import java.io.F
import java.io.FileNotFoundE
import android.app.A
import android.content.ContentV
import android.content.I
import android.graphics.B
import android.graphics.BitmapF
import android.net.U
import android.os.B
import android.provider.MediaStore.Images.M
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ImageV
public class MainActivity extends Activity implements OnClickListener{
public static final int REQUEST_CODE=0;
private Button paizhaoBt;
private ImageView photoIv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
private void initListener() {
paizhaoBt.setOnClickListener(this);
private void initView() {
paizhaoBt=(Button) findViewById(R.id.paizhao);
photoIv=(ImageView) findViewById(R.id.photo_iv);
public void onClick(View v) {
//创建ContentValues对象用于存储图片信息
ContentValues values=new ContentValues(3);
values.put(Media.DISPLAY_NAME, &test&);//图片名称
values.put(Media.DESCRIPTION, &test&);//图片描述
values.put(Media.MIME_TYPE, &image/jpeg&);//文件类型
//获取内容解析者将图片文件存储到MediaStore中
uri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI,new ContentValues());
Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK){
//获取屏幕宽高
int screenWidth=getWindowManager().getDefaultDisplay().getWidth();
int screenHeight=getWindowManager().getDefaultDisplay().getHeight();
//获取图片的宽高
BitmapFactory.Options options=new BitmapFactory.Options();
//只返回图片的范围大小,不解码图片本身
options.inJustDecodeBounds=
BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);
int imgWidth=options.outW
int imgHeight=options.outH
//求压缩比率,取整
int widthRadio=(int) Math.ceil(imgWidth/screenWidth);
int heightRadio=(int) Math.ceil(imgHeight/screenHeight);
//那个比率大的,作为压缩比率
options.inSampleSize=widthRadio&heightRadio?widthRadio:heightR
//解码图片
options.inJustDecodeBounds=
Bitmap bitmap=BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options);
photoIv.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
&/span&&span style=&font-size:14&&&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:orientation=&vertical& &
android:id=&@+id/paizhao&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&拍照& /&
&ImageView
android:id=&@+id/photo_iv&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:src=&@drawable/ic_launcher& /&
&/LinearLayout&&/span&
下面我们来继续学习从MediaStore中获取图片的方法
上面获取图片是通过调用摄像头后获取的单张图片,当我们不需要摄像头,只需要查看我们MediaStore库中的图片,我们到底该怎么做呢?
其实内容提供者MediaStore是以数据库的形式来存储数据的
为了执行查询,我们需要用到managedQuery方法
参数说明:第一个参数,uri
第二个参数,列名称的数组
第三个参数,where子句
第四个参数,where子句参数
第五个参数,order by子句
首先我们要创建一个需要返回的列的字符串数组
String[]columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};
//返回整个图库的记录,也可条件查找
Cursor cursor=managedQuery(Media.EXTERNAL_CONTENT_URI,columns,null,null,null);
返回的游标cursor中有我们当前选择的每个列的索引
String colunmIndex=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
为了从列表中选择字段我们需要使用索引查找
if(moveToFirst()){//确保游标有效并包含数据
String imgName=cursor.getString(colunmIndex);
怎样获取图片内部元数据EXIF呢?什么是EXIF?
EXIF表示可交换的图像文件格式,它是在图像文件中保存元数据的一种标准方式。EXIF数据实际上是图像文件的一部分,因此当图像位置发生变化时,应保存好EXIF
Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了数码照片的信息,包括拍摄的光圈、快门、平衡白、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码以及GPS等。简单来说,Exif=拍摄参数+JPED。因此,可以利用任何可以查看JPEG文件的看图软件浏览Exif信息,但是并不是所有图形程序都能处理Exif信息,而自Android2.0之后,加入了对图片Exif数据的支持。
ExifInterface
&  在Android下,通过ExifInterface类操作图片的Exif信息,虽然这个类的名字包含Interface,但它不是一个接口,它是一个类,处于&android.media.ExifInterface&包下,是媒体库的一部分功能的实现。ExifInterface有一个构造函数,接受一个String类型的数据,此为读取图片文件的地址。
  Exif数据在图片中可以理解为Key-value键值对的方式存储,一般通过如下几个方法操作:
String getAttribute(String tag):获取图片中属性为tag的字符串值。double getAttribute(String tag,double defaultValue):获取图片中属性为tag的double值。int getAttributeInt(String tag,defaultValue):获取图片中属性为tag的int值。void setAttribute(String tag,String value):根据输入参数,设定图片Exif的值。void saveAttrubutes():把内存中图片的Exif写入到图片中。
  可以看到,上面大部分方法操作了一个String类型的tag参数,此为Exif的属性,在ExifInterface中定义了一些字符串的静态常量表示这些tag值,常用如下:
TAG_APERTURE:光圈值。TAG_DATETIME:拍摄时间,取决于设备设置的时间。TAG_EXPOSURE_TIME:曝光时间。TAG_FLASH:闪光灯。TAG_FOCAL_LENGTH:焦距。TAG_IMAGE_LENGTH:图片高度。TAG_IMAGE_WIDTH:图片宽度。TAG_ISO:ISO。TAG_MAKE:设备品牌。TAG_MODEL:设备型号,整形表示,在ExifInterface中有常量对应表示。TAG_ORIENTATION:旋转角度,整形表示,在ExifInterface中有常量对应表示。
ExifInterface exifInterface = new ExifInterface(&/sdcard/a.jpg&);
String FFNumber = exifInterface.getAttribute(ExifInterface.TAG_APERTURE);
String FDateTime = exifInterface.getAttribute(ExifInterface.TAG_DATETIME);
String FExposureTime = exifInterface.getAttribute(ExifInterface.TAG_EXPOSURE_TIME);
String FFlash = exifInterface.getAttribute(ExifInterface.TAG_FLASH);
String FFocalLength = exifInterface.getAttribute(ExifInterface.TAG_FOCAL_LENGTH);
String FImageLength = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_LENGTH);
String FImageWidth = exifInterface.getAttribute(ExifInterface.TAG_IMAGE_WIDTH);
String FISOSpeedRatings = exifInterface.getAttribute(ExifInterface.TAG_ISO);
String FMake = exifInterface.getAttribute(ExifInterface.TAG_MAKE);
String FModel = exifInterface.getAttribute(ExifInterface.TAG_MODEL);
String FOrientation = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION);
String FWhiteBalance = exifInterface.getAttribute(ExifInterface.TAG_WHITE_BALANCE);
我们如何将EXIF信息写入到图像中呢?
Exif信息在图片中以二进制的形式存储,每个字段存储的数据位数是固定的,并且tag的数量也是固定,所以我们只能操作图片Exif信息中已经存在的tag的值,并且保存的数据要依照它存储位数的限制,如果存储的数据类型错误,将会导致存储的数据可能无法正确的取出,超出位数将被截取。如无法将TAG_ORIENTATION中存储一个字符串的数据,它必须存储int类型的值,多出来的将被截取
saveAttributes()方法主要用于把内存中所有当前Exif信息保存到目标图片中,依照官方文档的解释,它是一个低效率的,它会把图片的所有Exif信息,重新依次保存到目标图片,所以推荐使用setAttribute()方法进行设置Exif信息。但是在实际应用中发现,如果仅使用setAttribute()设置Exif信息,将不会写入到目标图片中,只有在改变Exif信息后,调用saveAttribute()才可以把新的Exif写入到目标图片中。这个过程效率比较低,模拟器上会卡顿一下,但是真机测试没有这样的情况,反应很快。
// 获取图片Exif
ExifInterface exif = new ExifInterface(&/sdcard/a.jpg&);
// 保存指定tag的值
exif.setAttribute(strAttr,strValue);
// 把Exif信息写入目标图片
exif.saveAttributes();
需要添加以下权限
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
下面是一个读取手机全部图片,并修改图片的EXIF信息,并读取信息的完整代码
activity中的代码
&span style=&font-size:14&&package com.example.
import java.io.IOE
import java.util.ArrayL
import java.util.L
import android.app.A
import android.database.C
import android.media.ExifI
import android.os.B
import android.provider.MediaStore.Images.M
import android.util.L
import android.view.V
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.G
import android.widget.TextV
import android.widget.T
public class MainActivity extends Activity {
//存储手机中的所有图片地址
private List&String& imgUrls=new ArrayList&&();
//显示图片总数
private TextView imgNumTv;
//用于展示图片
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgNumTv=(TextView) findViewById(R.id.photoNum);
gallery=(Gallery) findViewById(R.id.gallery1);
//需要查询的图片属性数组
String[]columns={Media.DATA,Media._ID,Media.TITLE,Media.DISPLAY_NAME};
//查询出来后,返回的Cursor对象,存储着图片信息
Cursor cursor=managedQuery(Media.EXTERNAL_CONTENT_URI, columns, null, null, null);
//获取图片地址在数据库中的列索引
int fileColumn=cursor.getColumnIndexOrThrow(Media.DATA);
//获取图片标题在数据库中的列索引
int titleColumn=cursor.getColumnIndexOrThrow(Media.TITLE);
//获取图片名字在数据库中的列索引
int displayColumn=cursor.getColumnIndexOrThrow(Media.DISPLAY_NAME);
//遍历游标,获取图片信息
while(cursor.moveToNext()){
String imgUrl=cursor.getString(fileColumn);//图片地址
String imgTitle=cursor.getString(titleColumn);//图片标题
String imgName=cursor.getString(displayColumn);//图片名称
Log.i(&图片&, imgTitle+&/n&+imgName+&/n&+imgUrl);
imgUrls.add(imgUrl);//将图片地址存储到集合
imgNumTv.setText(&你有&+imgUrls.size()+&张图片&);
//设置适配器
gallery.setAdapter(new ImageAdapter(imgUrls,this));
//设置项点击事件
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView&?& parent, View view,
int position, long id) {
//获取图片EXIF信息
ExifInterface ei=new ExifInterface(imgUrls.get(position));
String description=ei.getAttribute(ExifInterface.TAG_MODEL);
Toast.makeText(MainActivity.this, description, 0).show();
} catch (IOException e) {
e.printStackTrace();
&/span&画廊适配器代码
&span style=&font-size:14&&package com.example.
import java.io.IOE
import java.util.ArrayL
import java.util.L
import android.content.C
import android.graphics.B
import android.graphics.BitmapF
import android.media.ExifI
import android.view.V
import android.view.ViewG
import android.view.WindowM
import android.widget.BaseA
import android.widget.ImageV
import android.widget.ImageView.ScaleT
public class ImageAdapter extends BaseAdapter{
//图片地址集合
private List&String& imgUrls=new ArrayList&&();
private int screenW//屏幕宽
private int screenH//屏幕高
public ImageAdapter(List&String& imgUrls,Context context) {
this.imgUrls=imgU
this.context=
//获取屏幕宽高
WindowManager manager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
screenWidth=manager.getDefaultDisplay().getWidth();
screenHeight=manager.getDefaultDisplay().getHeight();
public int getCount() {
return imgUrls.size();
public Object getItem(int position) {
return imgUrls.get(position);
public long getItemId(int position) {
public View getView(int position, View convertView, ViewGroup parent) {
//修改图片EXIF数据信息
ExifInterface ei=new ExifInterface(imgUrls.get(position));
ei.setAttribute(ExifInterface.TAG_MODEL, &2015&);
ei.saveAttributes();
} catch (IOException e) {
e.printStackTrace();
ViewHolder holder=
if(convertView==null){
ImageView imageView=new ImageView(context);
convertView=imageV
holder=new ViewHolder();
holder.imageView=imageV
convertView.setTag(holder);
holder=(ViewHolder) convertView.getTag();
//压缩图片
BitmapFactory.Options options=new BitmapFactory.Options();
options.inJustDecodeBounds=
BitmapFactory.decodeFile(imgUrls.get(position), options);
//获取图片宽高
int imgWidth=options.outW
int imgHeight=options.outH
//求出采样比率
int radio=imgWidth/screenWidth&imgHeight/screenHeight?imgWidth/screenWidth:imgHeight/screenH
options.inJustDecodeBounds=
options.inSampleSize=
Bitmap bitmap=BitmapFactory.decodeFile(imgUrls.get(position), options);
//图片显示
holder.imageView.setImageBitmap(bitmap);
return convertV
class ViewHolder{
ImageView imageV
&/span&注意要在配置文件中添加写权限,不然修改图片EXIF信息不成功
&span style=&font-size:14&&&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&com.example.photoalbumdemo&
android:versionCode=&1&
android:versionName=&1.0& &
android:minSdkVersion=&8&
android:targetSdkVersion=&19& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
&application
android:allowBackup=&true&
android:icon=&@drawable/icon&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
android:name=&com.example.photoalbumdemo.MainActivity&
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&
&/manifest&
本文已收录于以下专栏:
相关文章推荐
v4l2 camera测试程序 保存成图片
c语言linuxuvc_camera
445人阅读 评论(0)
1在模拟器里,无法启动camera;
模拟器默认是disable camera的,需要enable,在AVD的设置界面添加camera
support yes这个属性;
2成功启动camera...
CameraRoll.getPhotos(tag, success, error) is deprecated.Use the returned Promise instead
CameraRoll...
* 到Url 获取BITMAP
* @param imgUrl
public static Bitmap getBitmapFromUrl...
如果在一个app中有大量的相似的布局条目时,可以考虑自定义组合控件,当然也可以使用include标签。本人认为在一定程度上认为include标签比自定义组合控件要简单。自定义组合控件不仅要继承控件或者...
Android 使用ContentProvider扫描手机中的图片
2, 通过遍历找到所有的图片格式的文件。强烈推荐使用第二种方法,准确。...
【Android】获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等) 收藏 众所周知,通过PackageManager可以获取手机端已安装的a...
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下
PackageManager packageManager = this.getPackageMana...
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下
PackageManager packageManager = this.getPackag...
转自: http://blog.csdn.net/feng88724/archive//6198446.aspx 众所周知,通过PackageManager可以获取手机端已安装的a...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 高中生无意中玩快开彩 的文章

 

随机推荐