首页 > 其他分享 >11

11

时间:2024-07-01 11:20:06浏览次数:15  
标签:11 String private Intent new import android

修改为调用摄像机后的代码
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Looper;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Handler;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import androidx.annotation.Nullable;

public class MainActivity extends AppCompatActivity {

private static final int CAMERA_REQUEST = 1;
private ImageView imageView;
private TextView textView;

private String accessToken;
private Bitmap selectedImageBitmap;

private static final String BAIDU_API_KEY = "YnFw5LSDvq76bzSdjWuGWlXL";
private static final String BAIDU_SECRET_KEY = "lOa0jDMgcQT0baNlzjIR7GMwCFoFEUUy";
private static final String FACE_DETECT_URL = "https://aip.baidubce.com/rest/2.0/face/v3/detect";

private final OkHttpClient client = new OkHttpClient();
private final Handler handler = new Handler(Looper.getMainLooper());
private final ExecutorService executorService = Executors.newSingleThreadExecutor();

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

    Button buttonRecordMood = findViewById(R.id.button_record_mood);
    buttonRecordMood.setOnClickListener(view -> openCamera());

    Button buttonViewRecords = findViewById(R.id.button_view_records);
    buttonViewRecords.setOnClickListener(view -> viewRecords());

    getAccessTokenAsync();
}

private void openCamera() {
    Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, CAMERA_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK && data != null && requestCode == CAMERA_REQUEST) {
        Bitmap bitmap = (Bitmap) data.getExtras().get("data");
        selectedImageBitmap = bitmap;
        String imageBase64 = bitmapToBase64(bitmap);
        sendFaceDetectRequest(imageBase64);
    }
}

private String bitmapToBase64(Bitmap bitmap) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
    byte[] byteArray = byteArrayOutputStream.toByteArray();
    return Base64.encodeToString(byteArray, Base64.DEFAULT);
}

private void getAccessTokenAsync() {
    executorService.execute(() -> {
        this.accessToken = getAccessToken();
        handler.post(() -> {
            if (this.accessToken == null) {
                Log.e("MainActivity", "Failed to get access token");
            }
        });
    });
}

private void sendFaceDetectRequest(String imageBase64) {
    if (accessToken == null) {
        Log.e("MainActivity", "Access token is null, cannot send face detect request.");
        return;
    }
    executorService.execute(() -> {
        JsonObject jsonObject = new JsonObject();
        jsonObject.addProperty("image", imageBase64);
        jsonObject.addProperty("image_type", "BASE64");
        jsonObject.addProperty("face_field", "age,beauty,expression");
        String jsonStr = new Gson().toJson(jsonObject);

        MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(jsonStr, mediaType);

        Request request = new Request.Builder()
                .url(FACE_DETECT_URL + "?access_token=" + this.accessToken)
                .post(body)
                .build();

        try {
            Response response = client.newCall(request).execute();
            if (response.isSuccessful()) {
                String responseStr = response.body().string();
                handler.post(() -> {
                    try {
                        JSONObject jsonResponse = new JSONObject(responseStr);
                        JSONObject result = jsonResponse.optJSONObject("result");
                        if (result != null) {
                            int age = result.getJSONArray("face_list").getJSONObject(0).getInt("age");
                            String beauty = result.getJSONArray("face_list").getJSONObject(0).getString("beauty");
                            String expression = result.getJSONArray("face_list").getJSONObject(0).getString("expression");

                            String resultText = "Age: " + age + "\nBeauty: " + beauty + "\nExpression: " + expression;

                            Intent intent = new Intent(MainActivity.this, MoodRecordActivity.class);
                            intent.putExtra("age", String.valueOf(age));  // 确保年龄是字符串类型
                            intent.putExtra("beauty", beauty);
                            intent.putExtra("expression", expression);
                            intent.putExtra("image", imageBase64);
                            startActivity(intent);
                        } else {
                            Log.e("MainActivity", "Face detect request failed: result is null");
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                });
            } else {
                Log.e("MainActivity", "Face detect request failed");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    });
}

private String getAccessToken() {
    String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
    RequestBody body = new FormBody.Builder()
            .add("grant_type", "client_credentials")
            .add("client_id", BAIDU_API_KEY)
            .add("client_secret", BAIDU_SECRET_KEY)
            .build();

    Request request = new Request.Builder()
            .url(authHost)
            .post(body)
            .build();

    try {
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            String responseBody = response.body().string();
            JsonObject jsonObject = new Gson().fromJson(responseBody, JsonObject.class);
            return jsonObject.get("access_token").getAsString();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

private void viewRecords() {
    Intent intent = new Intent(this, ViewRecordsActivity.class);
    startActivity(intent);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    executorService.shutdown();
}

}

标签:11,String,private,Intent,new,import,android
From: https://www.cnblogs.com/1947475882-/p/18277699

相关文章

  • 在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000
    在Linux中,可以使用tcpdump工具来抓取网络包。根据你的需求,我们需要过滤出只访问HTTP服务的包,目标IP为192.168.0.111,并且只抓取1000个包,最后将这些包保存到1.cap文件中。以下是具体的步骤和命令:打开终端:首先,你需要打开Linux系统的终端。使用tcpdump命令:tcpdump是一个常用的......
  • Windows11系统System.Workflow.Activities.resources.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Workflow.Activities.resources.dll......
  • Windows11系统System.Windows.Controls.Ribbon.resources.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.Controls.Ribbon.resources.......
  • Windows11系统System.Windows.dll文件丢失问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个System.Windows.dll文件(挑选合适的版本文件......
  • WPF在.NET9中的重大更新:Windows 11 主题
    在2023年的2月20日,在WPF的讨论区,WPF团队对路线的优先级发起了一次讨论。对三个事项发起了投票。第一个是Windows11主题第二个是更新的控件第三个是可空性注释最终Windows11主题得票最高,WPF团队2023-2024的工作优先级就是Windows11主题了。WPF控件的外观多年来一......
  • CF1148F Foo Fighters
    牛逼贪心题假设都是将总和正的变成负的,所以如果总和是负的,val取相反数对于二进制操作,我们一位一位考虑,想让其二进制下1的个数最好变成奇数,只能选一个数保留哪些1,所以我们保留一个1就能乘上-1,改变了奇偶性。贪心满足无后效性,最优子结构,局部最优解为全局最优解,我们尝试将一个数二......
  • 代码随想录算法训练营第50天 | 1143.最长公共子序列 、1035.不相交的线 、53. 最大子
    这几题都挺类似,都是求最长公共子序列,有些题目稍微变了下1143.最长公共子序列体会一下本题和718.最长重复子数组的区别视频讲解:https://www.bilibili.com/video/BV1ye4y1L7CQhttps://programmercarl.com/1143.最长公共子序列.html/***@param{string}text1*@param{......
  • C++11新特性
    1.字符串原始字面量        在C++11中添加了定义原始字符串的字面量,定义方式为:R“xxx(原始字符串)xxx”其中()两边的字符串可以省略。原始字面量R可以直接表示字符串的实际含义,而不需要额外对字符串做转义或连接等操作。        比如:编程过程中,使用的字符串中......
  • 【使用sudo apt-get出现报错】——无法获得锁 /var/lib/dpkg/lock-open(11:资 源暂时
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、ubuntu中进程正在被占用1.问题描述2.原因分析3.解决总结前言一、ubuntu中进程正在被占用1.问题描述在Ubuntu中,使用终端时输入带有sudoapt-get指令更新软件包时,出现如下的报......
  • C++11 mem_fn成员指针包装器
    C++11mem_fn成员指针包装器介绍函数模板std::mem_fn生成成员指针的包装器对象,用于存储、复制及调用成员指针。指向对象的引用和指针(包括智能指针)都可以在调用std::mem_fn时使用。注意:std::mem_fn只能包装public的成员指针,不能包装全局函数这里的成员指针指的是成员......