Android 6.0動態許可權呼叫相簿相機
阿新 • • 發佈:2019-01-05
1.建立頁面簡單佈局demo.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.takephoto.MainActivity" > <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="takePhone" android:text="拍照" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="choosePhone" android:text="相簿選擇" /> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerCrop" android:src="@drawable/ic_launcher" /> </LinearLayout>
2.Activity整體程式碼
/** * 相簿的選擇 * * @author Sugar * */ @SuppressLint("Override") public class DemoActivity extends FragmentActivity { private static final int CROP_PHOTO = 2; private static final int PICK_PIC = 3; private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE1 = 4; private static final int MY_PERMISSIONS_REQUEST_CALL_PHONE2 = 5; private File output; private Uri imageUri; private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.demo); imageView = (ImageView) findViewById(R.id.image); } /** * 相機 * * @param view */ public void takePhone(View view) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat .requestPermissions( this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, MY_PERMISSIONS_REQUEST_CALL_PHONE2); } else { takePhoto(); } } /** * 相簿 * * @param view */ public void choosePhone(View view) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat .requestPermissions( this, new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, MY_PERMISSIONS_REQUEST_CALL_PHONE2); } else { choosePhoto(); } } /** * 拍照 */ private void takePhoto() { /** * 最後一個引數是資料夾的名稱,可以隨便起 */ File file = new File(Environment.getExternalStorageDirectory(), "拍照"); if (!file.exists()) { file.mkdir(); } /** * 這裡將時間作為不同照片的名稱 */ output = new File(file, System.currentTimeMillis() + ".jpg"); /** * 如果該資料夾已經存在,則刪除它,否則建立一個 */ try { if (output.exists()) { output.delete(); } output.createNewFile(); } catch (Exception e) { e.printStackTrace(); } /** * 隱式開啟拍照的Activity,並且傳入CROP_PHOTO常量作為拍照結束後回撥的標誌 */ imageUri = Uri.fromFile(output); Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent, CROP_PHOTO); } /** * 從相簿選取圖片 */ private void choosePhoto() { /** * 開啟選擇圖片的介面 */ Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*");// 相片型別 startActivityForResult(intent, PICK_PIC); } /** * 呼叫相簿和拍照之後的返回 */ public void onActivityResult(int req, int res, Intent data) { switch (req) { /** * 拍照的請求標誌 */ case CROP_PHOTO: if (res == RESULT_OK) { try { /** * 該uri就是照片資料夾對應的uri */ Bitmap bit = BitmapFactory .decodeStream(getContentResolver().openInputStream( imageUri)); imageView.setImageBitmap(bit); } catch (Exception e) { e.printStackTrace(); } } break; /** * 從相簿中選取圖片的請求標誌 */ case PICK_PIC: if (res == RESULT_OK) { try { /** * 該uri是上一個Activity返回的 */ Uri uri = data.getData(); Bitmap bit = BitmapFactory .decodeStream(getContentResolver().openInputStream( uri)); imageView.setImageBitmap(bit); } catch (Exception e) { e.printStackTrace(); } } break; default: break; } } /** * 動態許可權 */ @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE1) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { takePhoto(); } else { // Permission Denied Toast.makeText(DemoActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); } } if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE2) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { // Permission Denied Toast.makeText(DemoActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show(); } } } }
備份記錄