app如何更换用户头像信息呢?不妨这样做

对于现在的手机应用而言,要想获得更多的人的使用,就需要给用户更多的自由功能才行,这也是基于用户体验开发软件的核心思想,一切以用户为中心,想用户之所想,做用户之所需。今天我就来谈一谈刚学到的一个关于设置用户头像的小技巧。


可行性分析



要想实现设置自定义的头像功能,我们通常来说会有两种选择,那就是拍照或者从手机图库里面获取。今天就来讲一讲,这两种方式实现的细节的地方。

  • 首先是拍照实现:原理上将,最简单的实现就是调用系统自带的照相机。这样最为省事嘛。当然了,您也可以通过使用自己开发的一个照相应用来实现这一功能(可以参考我之前的这篇文章做自己的安卓拍照应用,其实很简单)。但是这里并不建议您这样做,毕竟重复造轮子是没有任何意义的嘛,更何况自己实现的应用还不一定有人家系统自带的好使呢。
  • 然后是从本地的图库中选取一张图片来作为结果使用。这样最为方便,因为大部分的用户会使用图库中的图片滴。但是这种方式灵活性较差,因为用户很有可能只想上传自己的自拍照片。这样的话,我们就需要实现上面的那个功能了。

我的Demo



首先是布局文件,这里仅仅是两个按钮(分别用于实现上面的两种方式),和一个用于显示图层的ImageView。仅此而已。所以就不在此列出代码了。
然后是Java代码,这里就贴出来吧,方便大家浏览。

package com.example.intenttest;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

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

public class MainActivity extends Activity {

    private Button btn_capture;
    private Button btn_getPicture;
    private ImageView imageView;

    public void init() {
        btn_capture = (Button) findViewById(R.id.btn_capture);
        btn_getPicture = (Button) findViewById(R.id.btn_choose);
        imageView = (ImageView) findViewById(R.id.imageview);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    /**
     * 调用系统的拍照
     * @param view
     */
    public void beginCapture(View view) {
        Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 1001);
    }

    /**
     * 从手机的本地图库中选择一张图片作为头像资源
     * @param view
     */
    public void getPicture(View view) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        intent.putExtra("crop", true);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 1002);
    }

    /**
     * 将上面的Intent中的返回的结果分别显示到相关的ImageView上
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //调用系统相机,获得照片资源,选要注意的是这里的data 是存在于内存中的
        if (requestCode == 1001 && resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");
            imageView.setImageBitmap(bitmap);

        }
        //使用图库资源,以ContentProvider的方式来实现
        if (requestCode == 1002 && resultCode == RESULT_OK) {
            InputStream is = null;
            try {
                Uri uri = data.getData();
                ContentResolver resolver = getContentResolver();
                is = resolver.openInputStream(uri);
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                imageView.setImageBitmap(bitmap);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(is!=null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    is = null;
                }
            }

        }
    }
}

代码实现原理详解



首先是第一种方式,我们可以看到如下核心代码:

Intent intent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 1001);

以及:

//调用系统相机,获得照片资源,选要注意的是这里的data 是存在于内存中的
        if (requestCode == 1001 && resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            Bitmap bitmap = (Bitmap) bundle.get("data");
            imageView.setImageBitmap(bitmap);

        }

这样做的核心就在于那个Intent了,其指定了是从android.provider.MediaStore.ACTION_IMAGE_CAPTURE,这样就可以在onActivityResult方法中将处理的结果通过转换成一个位图的方式设置到ImageView上,实现用户头像设置。



然后是第二种方式,

/**
     * 从手机的本地图库中选择一张图片作为头像资源
     * @param view
     */
    public void getPicture(View view) {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        intent.putExtra("crop", true);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, 1002);
    }
//使用图库资源,以ContentProvider的方式来实现
        if (requestCode == 1002 && resultCode == RESULT_OK) {
            InputStream is = null;
            try {
                Uri uri = data.getData();
                ContentResolver resolver = getContentResolver();
                is = resolver.openInputStream(uri);
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                imageView.setImageBitmap(bitmap);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if(is!=null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    is = null;
                }
            }

        }

这里是借助于ContentProvider,来获取共享的资源。借助于getContentProvider()方法,然后得到一个目标图片的输入流,转换成位图,最后设置到我们的ImageView上,这样同样可以实现我们的头像设置功能。

总结



今天的这个小技巧,虽然很简单,但是实用性还是很高的。我们在日常的额开发过程中遇到的额可能不是简单的直接在本地实现头像的额更换,但是我们可以再一个Service中来实现上传的功能,借助于流的形式,原理上市相似的。

对于代码,如果您发现了一些问题,欢迎批评指正。

时间: 2024-10-28 19:00:58

app如何更换用户头像信息呢?不妨这样做的相关文章

Mac怎么更换用户头像?

  Mac电脑怎么更换用户头像,Mac用户头像怎么修改?对于很多第一次使用Mac电脑的新手用户来说,Mac电脑怎么更换用户头像看起来确实是个很难解决的问题,但给自己心爱的Mac系统配一个个性十足的头像又是一件非常必要的事儿,下面小编给各位Mac新用户带来Mac如何修改用户头像的图文教程 第一步.点击桌面底部系统偏好设置图标 第二步.在系统偏好设置界面,点击"系统"项目下的"用户与群组" 第三步.在用户与群组界面,如果希望更换成系统默认头像,点击用户头像,在"

Mac用户头像怎么修改?

  Mac用户头像怎么修改?Mac电脑的操作对于很多新用户来说,可能不是很方便.有不少人都在问,Mac用户头像怎么修改?Mac电脑怎么更换用户头像看起来确实是个很难解决的问题,但给自己心爱的Mac系统配一个个性十足的头像又是一件非常必要的事儿,下面小编给各位Mac新用户带来Mac如何修改用户头像的图文教程. 第一步.点击桌面底部系统偏好设置图标 第二步.在系统偏好设置界面,点击"系统"项目下的"用户与群组" 第三步.在用户与群组界面,如果希望更换成系统默认头像,点击

Win8.1更改用户头像的2种方法详解

方法一, 在Windows8.1系统中若需要更改用户头像,我们可以通过个性化设置进行更改,下面是具体的操作方法:  1.将鼠标移至屏幕右下角,调用出超级菜单.    2. 在超级菜单中,选择[设置].         3.选择[更改电脑设置].    4.在"电脑设置"中选择[账户].    5.选择"用户头像"下方的[浏览].    6.在"图片"文件夹里选择自己喜欢的图像,然后点击右下方的[选择图像]即可.    7. 此时用户的头像即被更改

angularjs-求教 route ng-view 单页切换时如何缓存用户输入信息

问题描述 求教 route ng-view 单页切换时如何缓存用户输入信息 我用ng-view 做的单页 在几个单页之间切换的时候用户输入的数据不见了1.输入文字2.在单页之间切换3.回到之前页面 输入的文字不见了

手机APP应用获取用户信息问题

几乎所以的手机应用(App)都需要获取用户的手机信息,否则是无法安装的,这当然包括了央视网的App.当然了,央视网的广告位也是可以抓取Cookie信息的.其实拿完了数据,可行善,亦可作恶. 央视3·15晚会将互联网隐私"一鱼三吃"并幻化出APP.Cookies等三个话题,此番本报再度聚焦这些话题,并不为反驳央视的观点,而在于呈现一个真实的互联网隐私现状.值得注意的是,我们的报道中指出,针对APP和Cookies,目前我们的消费者都有选择的权利,用,或不用,都由你说了算!至于作为消费者的

Mac用户头像怎么更换

  第一步.点击桌面底部系统偏好设置图标 第二步.在系统偏好设置界面,点击"系统"项目下的"用户与群组" 第三步.在用户与群组界面,如果希望更换成系统默认头像,点击用户头像,在"默认"里面,点击选择自己满意的头像后,点击底部"完成".当然也可以直接开启摄像头拍照或者从照片流中导入你的iOS设备上的照片. 如果您事前已经准备好自己准备更换的头像(一般苹果系统默认为png格式),将希望更换的头像,直接拖动到头像位置 第四步.随后会

Android开发中用户登录信息怎么关联整个APP

问题描述 Android开发中用户登录信息怎么关联整个APP 5C Android开发,App的某些功能显示是用户登录后才能用的.可是用户登录后怎么关联整个APP呢? 解决方案 用一个全局变量(单例类)保存用户信息. 解决方案二: 看你的App需不需要实现自动登录功能,如果需要的话可以存到SharedPreferences中 解决方案三: 你可以写一个reciever,监听进程的启动和停止,进程package就是你项目的package,是android唯一的.

Android实现用户头像更换操作_Android

你以为头像更换很容易?或许对于用户来讲,在微信上更换一个头像只是点击头像,选择拍照或相册,裁剪返回而已.但是对于程序员来说,要实现其实也挺吃力的(小火柴花了一个下午整理~_~). 正如用户使用那样,代码的实现也是按照操作的顺序而逐步展开.如下图: 接下来主要来讲解一下代码: 1. 弹框选择相册或拍照 比较简单的方式就是直接使用AlertDialog弹出选项供用户进行选择 public static void showImagePickDialog(final Activity activity)

Android实现用户头像更换操作

你以为头像更换很容易?或许对于用户来讲,在微信上更换一个头像只是点击头像,选择拍照或相册,裁剪返回而已.但是对于程序员来说,要实现其实也挺吃力的(小火柴花了一个下午整理~_~). 正如用户使用那样,代码的实现也是按照操作的顺序而逐步展开.如下图: 接下来主要来讲解一下代码: 1. 弹框选择相册或拍照 比较简单的方式就是直接使用AlertDialog弹出选项供用户进行选择 public static void showImagePickDialog(final Activity activity)