android开发技巧与实例
Posted 狂奔的CD
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发技巧与实例相关的知识,希望对你有一定的参考价值。
文章目录
2021/10/14
android studio设置注释模板
settings->Editor->File and Code Templates->Includes - >File Header
/**
*
* @Classname: $NAME
* @Description: 类描述
* @Author: xxx
* @CreateDate: $DATE $TIME
*/
权限动态申请,比如相机和读写卡权限
/** request permissions
* 拍照权限和读写卡权限需要在主清单文件中配置
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults)
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[0] != PackageManager.PERMISSION_GRANTED || grantResults[1] != PackageManager.PERMISSION_GRANTED)
Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show();
private boolean requestAllPermissions()
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this, new String[]Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA,
0);
return false;
return true;
同时需要在主清单中声明
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
拍照调用
需要执行上面 权限动态申请 过程
java代码
public static final int TAKE_PHOTO_REQUEST_CODE = 1;
/**
* 拍照保存在应用内部
* 需要在主清单文件中声明对应内容提供者provider com.xxx.fileprovider
*/
private void takePhoto()
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null)
// Create the File where the photo should go
File photoFile = null;
try
photoFile = createImageFile();
catch (IOException ex)
Log.e("MainActitity", ex.getMessage(), ex);
Toast.makeText(OCRActivity.this,
"Create Camera temp file failed: " + ex.getMessage(), Toast.LENGTH_SHORT).show();
// Continue only if the File was successfully created
if (photoFile != null)
Log.i(TAG, "FILEPATH " + getExternalFilesDir("Pictures").getAbsolutePath());
Uri photoURI = FileProvider.getUriForFile(this,
"com.xxx.fileprovider",
photoFile);
currentPhotoPath = photoFile.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, TAKE_PHOTO_REQUEST_CODE);
Log.i(TAG, "startActivityForResult finished");
private File createImageFile() throws IOException
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".bmp", /* suffix */
storageDir /* directory */
);
return image;
//intent回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
switch (requestCode)
case TAKE_PHOTO_REQUEST_CODE:
if (currentPhotoPath != null)
ExifInterface exif = null;
try
exif = new ExifInterface(currentPhotoPath);
catch (IOException e)
e.printStackTrace();
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_UNDEFINED);
Log.i(TAG, "rotation " + orientation);
Bitmap image = BitmapFactory.decodeFile(currentPhotoPath);
....
else
Log.e(TAG, "currentPhotoPath is null");
break;
default:
break;
主清单中声明内容提供者
<!--用于拍照存储图片-->
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.xxx.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"></meta-data>
</provider>
图库调用
需要执行上面 权限动态申请 过程
java代码
public static final int OPEN_GALLERY_REQUEST_CODE = 0;
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, OPEN_GALLERY_REQUEST_CODE);
//intent回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
switch (requestCode)
case OPEN_GALLERY_REQUEST_CODE:
if (data == null)
break;
try
ContentResolver resolver = getContentResolver();
Uri uri = data.getData();
Bitmap image = MediaStore.Images.Media.getBitmap(resolver, uri);
String[] proj = MediaStore.Images.Media.DATA;
Cursor cursor = managedQuery(uri, proj, null, null, null);
cursor.moveToFirst();
if (image != null)
ivInputImage.setImageBitmap(image);
catch (IOException e)
Log.e(TAG, e.toString());
break;
default:
break;
以上是关于android开发技巧与实例的主要内容,如果未能解决你的问题,请参考以下文章
Android开发小技巧-动态设置Drawable与Tint