Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#7 #482 使用相机拍照 #1746

Merged
merged 2 commits into from
May 4, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 25 additions & 2 deletions students/com1714080901106/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="edu.hzuapps.androidlabs.com1714080901106">

<!--获取网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--获取相机权限-->
<uses-feature
android:name="android.hardware.camera2"
android:required="false" />
<!--写入SD卡权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--读取SD卡权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
android:allowBackup="true"
Expand All @@ -11,18 +20,32 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="com.google.android.actions"
android:resource="@xml/provider_paths" />

<activity
android:name="edu.hzuapps.androidlabs.dmc.Com1714080901106Activity01"
android:label="@string/app_name">
</activity>
android:label="@string/app_name"></activity>
<activity
android:name="edu.hzuapps.androidlabs.dmc.Activity_Login"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,44 +1,51 @@
package edu.hzuapps.androidlabs.com1714080901106;

import android.Manifest;
import android.content.ContentUris;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.annotation.RequiresApi;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.constraint.ConstraintLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import edu.hzuapps.androidlabs.com1714080901106.R;

public class Activity_Login extends AppCompatActivity {
private EditText username;
private EditText password;
private Button login;
private Button register;
private Button dl_image;
private String name;
private String word;
private ConstraintLayout layout;
private EditText username;//用户名文本框
private EditText password;//密码文本框
private Button login;//登录按钮
private Button register;//注册按钮
private Button dl_image;//下载图片按钮
private Button take_photo;//拍照按钮
private Button choose_photo;//选择照片
private String name;//用户名
private String word;//密码
private ConstraintLayout layout;//主界面
private Uri imageUri;//图片路径
static final int TAKE_PHOTO = 1;//拍照请求
static final int CHOOSE_PHOTO = 2;//选择照片请求

@Override
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -50,6 +57,8 @@ protected void onCreate(Bundle savedInstanceState) {
login = findViewById(R.id.login);
register = findViewById(R.id.register);
dl_image = findViewById(R.id.download_image);
take_photo = findViewById(R.id.take_photos);
choose_photo = findViewById(R.id.choose_image);
layout = findViewById(R.id.background);

login.setOnClickListener(new View.OnClickListener() {//登录
Expand Down Expand Up @@ -90,10 +99,94 @@ public void onClick(View v) {
@Override
public void onClick(View v) {
showImage();
Toast.makeText(Activity_Login.this, "加载成功!", Toast.LENGTH_LONG).show();
}
});

take_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
File outputImage = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "photo.jpg");
try {//初始化图片
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = (Uri) FileProvider.getUriForFile(Activity_Login.this, getPackageName() + ".fileprovider", outputImage);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);//打开相机
}
});

choose_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("android.intent.action.GET_CONTENT");
intent.setType("image/*");
startActivityForResult(intent, CHOOSE_PHOTO);//打开相册
}
});
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CHOOSE_PHOTO && resultCode == RESULT_OK)
handleImageOnKitKat(data);
}

private void handleImageOnKitKat(Intent data) {
String imagePath = null;
Uri uri = data.getData();//获取路径
if (DocumentsContract.isDocumentUri(this, uri)) {
String docId = DocumentsContract.getDocumentId(uri);
if ("com.android.providers.media.documents".equals(
uri.getAuthority())) {
String id = docId.split(":")[1];
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
} else if ("com.android.providers.downloads.documents".equals(
uri.getAuthority())) {
Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(docId));
imagePath = getImagePath(contentUri, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
imagePath = getImagePath(uri, null);
}
displayImage(imagePath);//设置背景图片
}

private String getImagePath(Uri uri, String selection) {//获取照片路径
String path = null;
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}

private void displayImage(String imagePath) {//将照片设置为背景图片
//获取运行时权限
if (ActivityCompat.checkSelfPermission(Activity_Login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(Activity_Login.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}

if (imagePath != null) {
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
layout.setBackground(new BitmapDrawable(getResources(), bitmap));
} else {
Toast.makeText(this, "failed to get image", Toast.LENGTH_SHORT).show();
}
}

private void showImage() {
new Thread(new Runnable() {
@Override
Expand Down Expand Up @@ -127,6 +220,7 @@ private void show_image(final Bitmap bitmap) {
@Override
public void run() {
layout.setBackground(new BitmapDrawable(getResources(), bitmap));

}
});
}
Expand Down
27 changes: 22 additions & 5 deletions students/com1714080901106/app/src/main/res/layout/login.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="178dp"
android:orientation="horizontal"/>
android:orientation="horizontal" />

<LinearLayout
android:layout_width="match_parent"
Expand Down Expand Up @@ -114,14 +116,29 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
android:orientation="vertical"
android:gravity="bottom">

<Button
android:id="@+id/download_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加载背景图片"
android:layout_gravity="bottom"/>
android:text="加载背景图片" />

<Button
android:id="@+id/take_photos"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="使用相机拍照"
android:layout_gravity="end"/>


<Button
android:id="@+id/choose_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="从相册选择背景图片" />

</LinearLayout>


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>