Android调用Camera APIs实现拍照功能并上传图片

本文介绍了如何在Android应用中使用Camera APIs实现拍照功能,并结合httpmime库上传图像到服务器。详细讨论了Activity和Intent的概念,运行时权限的请求,以及上传图像所需的权限和步骤。
摘要由CSDN通过智能技术生成

用安卓写了一个简单的APP,主要功能是拍照并上传图片。拍照部分功能直接调用系统Camera APIs,上传图片功能部分使用的httpmime。

完成的工程文件可以在这里下载


Activity and Intent

安卓程序中,有两个重要的东西需要弄清楚,一个是Activity,一个是Intent

Activity定义了用户和应用交互的逻辑,有点类似与网页前端,是和用户进行交互的界面。不用的是安卓中的Activity有不同的状态,比如当你正在运行一个APP的时候,切换到另外一个APP,那么原先的APP的状态就改变了。Activity的状态变化又叫做Activity Lifecycle,完整的Activity Lifecycle如下图:

这里写图片描述

用 Activity 类来定义Activity Lifecycle,Activity 有如下的类成员函数。所有的应用都会重写(override) onCreate(Bundle)函数来做一些初始化的工作,大部分会重新onPause()来把必要的数据状态的改变保存下来。需要在不同阶段做的事情,可以通过重载对应的函数就可以啦。

 public class Activity extends ApplicationContext {
   

     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }


在一个安卓应用中,经常会有在Activity中调用另一个Activity的情况,这时就需要使用Intent类来指明需要调用何种Activity、以及传递必要的数据。Intent的意思是目的、意图,个人觉得这个Intent的类名取得非常好,因为它的作用也正是来描述想要做何种操作。以下是Intent的官方解释:

An intent is an abstract description of an operation to be performed. It can be used with startActivity to launch an Activity, broadcastIntent to send it to any interested BroadcastReceiver components, and startService(Intent) or bindService(Intent, ServiceConnection, int) to communicate with a background Service.

An Intent provides a facility for performing late runtime binding between the code in different applications. Its most significant use is in the launching of activities, where it can be thought of as the glue between activities. It is basically a passive data structure holding an abstract description of an action to be performed.


Requesting Permissions at Run Time

首先简单介绍一下,我使用的手机是安卓6.0系统,API 23。从API 23开始,安卓程序中涉及到用户隐私数据的权限需要动态请求权限。通常在程序中需要先检查是否具体有使用权限,没有的话需要请求权限,用户准许了才可以使用。

下面的代码检查应用是否具有读联系人的权限,并在需要的时候请求权限。

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an explanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

下面的代码可以用来处理请求权限的结果:

@Override
public void onRequestPe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值