2024.5.27

第五十七天

所花时间:2小时

代码量:300+

博客量:1

了解到的知识点:团队作业8

发布分享内容界面,包含图片选取

package com.example.share;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.location.Location;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import com.example.share.dao.postDao;
import com.example.share.entity.MyUser;
import com.example.share.entity.post;
import com.example.share.utils.CommonUtils;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;

public class FenxiangFragment extends Fragment {
    private static final int PICK_IMAGE_REQUEST = 1;
    private static final int REQUEST_IMAGE_CAPTURE = 2;
    private static final int REQUEST_LOCATION_PERMISSION = 3;
    private ArrayList<Uri> imageUris;
    private ImageGridAdapter adapter;
    private FusedLocationProviderClient fusedLocationClient;
    private String locationString;
    private TextView locationTextView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_fenxiang, container, false);

        EditText editText = view.findViewById(R.id.editTextShareContent);
        GridView gridView = view.findViewById(R.id.gridViewImages);
        Button shareButton = view.findViewById(R.id.buttonShare);
        Button locationButton = view.findViewById(R.id.buttonLocation);
        locationTextView = view.findViewById(R.id.textViewLocation);

        imageUris = new ArrayList<>();
        adapter = new ImageGridAdapter(getActivity(), imageUris);
        gridView.setAdapter(adapter);

        fusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());

        gridView.setOnItemClickListener((parent, view1, position, id) -> {
            if (position == imageUris.size()) {
                openImageSelector();
            }
        });

        shareButton.setOnClickListener(v -> submitPost(editText.getText().toString(), imageUris));
        locationButton.setOnClickListener(v -> requestLocation());
        return view;
    }

    private void openImageSelector() {
        final CharSequence[] options = {"从相册中选择图片", "打开相机", "取消"};
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("选择操作");
        builder.setItems(options, (dialog, item) -> {
            if (options[item].equals("从相册中选择图片")) {
                requestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, PICK_IMAGE_REQUEST);
            } else if (options[item].equals("打开相机")) {
                requestPermission(Manifest.permission.CAMERA, REQUEST_IMAGE_CAPTURE);
            } else if (options[item].equals("取消")) {
                dialog.dismiss();
            }
        });
        builder.show();
    }

    private void requestPermission(String permission, int requestCode) {
        if (ContextCompat.checkSelfPermission(getActivity(), permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{permission}, requestCode);
        } else {
            handlePermissionGranted(requestCode);
        }
    }

    private void handlePermissionGranted(int requestCode) {
        if (requestCode == PICK_IMAGE_REQUEST) {
            Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST);
        } else if (requestCode == REQUEST_IMAGE_CAPTURE) {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
            } else {
                Toast.makeText(getActivity(), "没有找到相机应用", Toast.LENGTH_SHORT).show();
            }
        } else if (requestCode == REQUEST_LOCATION_PERMISSION) {
            requestLocation();
        }
    }

    private void requestLocation() {
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION_PERMISSION);
        } else {
            fusedLocationClient.getLastLocation().addOnSuccessListener(getActivity(), location -> {
                if (location != null) {
                    locationString = "Lat: " + location.getLatitude() + ", Lng: " + location.getLongitude();
                    locationTextView.setText(locationString);
                    Toast.makeText(getActivity(), "位置: " + locationString, Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(getActivity(), "无法获取位置", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            handlePermissionGranted(requestCode);
        } else {
            Toast.makeText(getActivity(), "权限被拒绝", Toast.LENGTH_SHORT).show();
        }
    }

    private void submitPost(String text, ArrayList<Uri> imageUris) {
        SharedPreferences sharedPref = getActivity().getSharedPreferences("app_prefs", Context.MODE_PRIVATE);
        String username = sharedPref.getString("username", ""); // 获取存储的用户名,如果没有则默认为空字符串
        post post1 = new post(username,text,imageUris);
        postDao postDao = new postDao();
        postDao.savePost(username,text,imageUris);
        sendDataToServer(text);
        for (Uri uri : imageUris) {
            sendImageToServer(uri);
        }
        Toast.makeText(getActivity(), "发布成功", Toast.LENGTH_SHORT).show();
    }



    private void sendDataToServer(String text) {
        System.out.println("发送文本到服务器: " + text);
    }

    private void sendImageToServer(Uri uri) {
        System.out.println("发送图片到服务器: " + uri.toString());
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null) {
            Uri imgUri = data.getData();
            if (imgUri != null) {
                imageUris.add(imgUri);
                adapter.notifyDataSetChanged();
            }
        } else if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK && data != null) {
            Bundle extras = data.getExtras();
            if (extras != null) {
                Bitmap bitmap = (Bitmap) extras.get("data");
                if (bitmap != null) {
                    Uri imgUri = getImageUriFromBitmap(getActivity(), bitmap);
                    imageUris.add(imgUri);
                    adapter.notifyDataSetChanged();
                }
            }
        }
    }

    private Uri getImageUriFromBitmap(Context context, Bitmap bitmap) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "Title", null);
        return Uri.parse(path);
    }
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/editTextShareContent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="分享你的新鲜事..."
        android:inputType="textMultiLine"
        android:padding="10dp"/>

    <GridView
        android:id="@+id/gridViewImages"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/editTextShareContent"
        android:numColumns="3"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:padding="4dp"/>

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/buttonLocation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/gridViewImages"
        android:text="获取位置"
        android:padding="10dp"
        android:layout_marginTop="10dp"/>
    <TextView
        android:id="@+id/textViewLocation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/gridViewImages"
        android:layout_alignParentRight="true"
        android:padding="8dp"
        android:text="位置"
        android:textColor="#000000"
        android:textSize="14sp" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/buttonShare"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/buttonLocation"
        android:text="发表"
        android:padding="10dp"
        android:layout_marginTop="10dp"/>

</RelativeLayout>

 

posted @ 2024-06-17 01:16  cvjj  阅读(16)  评论(0)    收藏  举报