Android最全android中调用系统的相册或者相机拍照并上传照片,2024年最新安卓面试题10道

更多学习和讨论,欢迎加入我们!

有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

这里有2000+小伙伴,让你的学习不寂寞~·

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

                    image = BitmapFactory.decodeFile(getExternalCacheDir() + "/"+SelectPicPopupWindowActivity.TAKE_PHOTO_NAME);

                    if (image != null) {

                        savePicture(image, adapter.imageView);

                    }

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

            break;

        default:

            break;



    }

}





/**

 * 保存并返回的图片

 *

 * @param bitmap

 * @param imageView

 */

private void savePicture(Bitmap bitmap, ImageView imageView) {

    FileOutputStream b = null;

    String str = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";

    String name = null;

    switch (adapter.clickPosition) {

        case 0:

            name = "1001_" + str;

            break;

        case 1:

            name = "1002_" + str;

            break;

        case 2:

            name = "1003_" + str;

            break;

        case 3:

            name = "1004_" + str;

            break;

        case 4:

            name = "1005_" + str;

            break;



    }



    String fileName = getCacheDir() + name;

    boolean bl = false;

    try {

        b = new FileOutputStream(fileName);

        bl = bitmap.compress(Bitmap.CompressFormat.JPEG, 10, b);// 把数据写入文件

        if (bl) {

            adapter.addUrl(fileName, adapter.clickPosition);//添加需要上传图片的链接

            UtilLog.d("bl:" + bl);

            UtilLog.d("fileName:" + fileName);

            Glide.with(this)

                    .load(fileName)

                    // .placeholder(R.drawable.anim)

                    // .bitmapTransform(new RoundedCornersTransformation(this, 50, 0, RoundedCornersTransformation.CornerType.ALL))

                    .crossFade(1000)

                    .into(imageView);

            UtilLog.d("xianshiwangcheng");

        }

    } catch (FileNotFoundException e) {

        e.printStackTrace();

    } finally {

        try {

            b.flush();

            b.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }



}

  

仿ios的选择页面



import java.io.File;

import android.Manifest;

import android.app.Activity;

import android.app.Dialog;

import android.content.ActivityNotFoundException;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.os.Build;

import android.os.Bundle;

import android.provider.MediaStore;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.Toast;

public class SelectPicPopupWindowActivity extends Activity implements OnClickListener {

private static final int OPNE_CAMRA=0;

//调用相机拍照,保存照片的名字

public static final String TAKE_PHOTO_NAME = "take_photo.jpg";

private Button btn_take_photo, btn_pick_photo, btn_cancel;

private LinearLayout layout;

private Intent intent;

public static String url;

private int sign=1;//是否弹出横向拍照的提示,0不弹出,1弹出

//下面这句指定调用相机拍照后的照片存储的路径

File tempFile = null;



@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_select_pic_popup_window);

// File dirFile = new File(getExternalCacheDir());

// if (!dirFile.exists()) {

// dirFile.mkdirs();

// }

    tempFile = new File(getExternalCacheDir(), TAKE_PHOTO_NAME);



    intent = getIntent();

    sign=intent.getIntExtra("sign",1);

    btn_take_photo = (Button) this.findViewById(R.id.btn_take_photo);//照相

    btn_pick_photo = (Button) this.findViewById(R.id.btn_pick_photo);//相册

    btn_cancel = (Button) this.findViewById(R.id.btn_cancel);



    layout = (LinearLayout) findViewById(R.id.pop_layout);



    // 添加选择窗口范围监听可以优先获取触点,即不再执行onTouchEvent()函数,点击其他地方时执行onTouchEvent()函数销毁Activity

    layout.setOnClickListener(new OnClickListener() {



        public void onClick(View v) {

            // TODO Auto-generated method stub

            Toast.makeText(getApplicationContext(), "提示:点击窗口外部关闭窗口!",

                    Toast.LENGTH_SHORT).show();

        }

    });

    // 添加按钮监听

    btn_cancel.setOnClickListener(this);

    btn_pick_photo.setOnClickListener(this);

    btn_take_photo.setOnClickListener(this);

}



// 实现onTouchEvent触屏函数但点击屏幕时销毁本Activity

@Override

public boolean onTouchEvent(MotionEvent event) {

    finish();

    return true;

}





public void onClick(View v) {

    switch (v.getId()) {

        case R.id.btn_take_photo:

            try {



                if (RenZhengListViewAdapter.isFirstTakePhono&&sign!=0) {

                    RenZhengListViewAdapter.isFirstTakePhono = false;

                    UtilDialog.showTakePhotoDialog(this, new DialogButtonClickInterface() {

                        @Override

                        public void leftButtonClick(Dialog dialog) {



                        }



                        @Override

                        public void rightButtonClick(Dialog dialog) {



                        }



                        @Override

                        public void singleButtonClick(Dialog dialog) {

                            if (Build.VERSION.SDK_INT >= 23) {

                                int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);

                                if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){

                                    ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);

                                    return;

                                }else{



                                    openCamra();//调用具体方法

                                }

                            } else {



                                openCamra();//调用具体方法

                            }

                        }

                    });

                } else {

                    if (Build.VERSION.SDK_INT >= 23) {

                        int checkCallPhonePermission = ContextCompat.checkSelfPermission(SelectPicPopupWindowActivity.this, Manifest.permission.CAMERA);

                        if(checkCallPhonePermission != PackageManager.PERMISSION_GRANTED){

                            ActivityCompat.requestPermissions(SelectPicPopupWindowActivity.this,new String[]{Manifest.permission.CAMERA},OPNE_CAMRA);

                            return;

                        }else{



                            openCamra();//调用具体方法

                        }

                    } else {



                        openCamra();//调用具体方法

                    }



                }

            } catch (Exception e) {

                e.printStackTrace();

            }

            break;

        case R.id.btn_pick_photo:

            try {

                //选择照片的时候也一样,我们用Action为Intent.ACTION_GET_CONTENT,

                //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个

                Intent intent = new Intent();

                intent.setType("image/*");

                intent.setAction(Intent.ACTION_GET_CONTENT);

                startActivityForResult(intent, 2);

            } catch (ActivityNotFoundException e) {



            }

            break;

        case R.id.btn_cancel:

            finish();

            break;

        default:

            break;

    }



}

private void openCamra(){

    //拍照我们用Action为MediaStore.ACTION_IMAGE_CAPTURE,

    //有些人使用其他的Action但我发现在有些机子中会出问题,所以优先选择这个

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));

    startActivityForResult(intent, 1);

}

学习路线+知识梳理

花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。

这次就分享到这里吧,下篇见

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

tExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));

    startActivityForResult(intent, 1);

}

学习路线+知识梳理

花了很长时间,就为了整理这张详细的知识路线脑图。当然由于时间有限、能力也都有限,毕竟嵌入式全体系实在太庞大了,包括我那做嵌入式的同学,也不可能什么都懂,有些东西可能没覆盖到,不足之处,还希望小伙伴们一起交流补充,一起完善进步。

这次就分享到这里吧,下篇见

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值