真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android如何實現(xiàn)拍照及圖片裁剪

這篇文章主要介紹Android如何實現(xiàn)拍照及圖片裁剪,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

十余年的廣靈網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整廣靈建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)公司從事“廣靈網(wǎng)站設計”,“廣靈網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

最近做項目中涉及到了圖片相關功能 ,在使用安卓6.0手機及7.1手機拍照時,遇到了因權限及文件管理導致程序崩潰等問題。
 剛好把功能修改完,把代碼簡單地貼一下,方便以后使用。

—-主界面 代碼 ——

public class MainActivity extends AppCompatActivity {
  //拍照按鈕
  private Button take_photo;
  //顯示裁剪后的圖片
  private ImageView photo_iv;
  private static final int PERMISSIONS_FOR_TAKE_PHOTO = 10;
  //圖片文件路徑
  private String picPath;
  //圖片對應Uri
  private Uri photoUri;
  //拍照對應RequestCode
  public static final int SELECT_PIC_BY_TACK_PHOTO = 1;
  //裁剪圖片
  private static final int CROP_PICTURE = 3;


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    take_photo = (Button) findViewById(R.id.take_photo);
    photo_iv = (ImageView) findViewById(R.id.photo_iv);
    take_photo.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
        //小于6.0版本直接操作
        if (Build.VERSION.SDK_INT < 23) {
          takePictures();
        } else {
          //6.0以后權限處理
          permissionForM();
        }
      }
    });
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
      if (requestCode == SELECT_PIC_BY_TACK_PHOTO) {
        String[] pojo = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(photoUri, pojo, null, null, null);
        if (cursor != null) {
          int columnIndex = cursor.getColumnIndexOrThrow(pojo[0]);
          cursor.moveToFirst();
          picPath = cursor.getString(columnIndex);
          if (Build.VERSION.SDK_INT < 14) {
            cursor.close();
          }
        }
        if (picPath != null && (picPath.endsWith(".png") || picPath.endsWith(".PNG") || picPath.endsWith(".jpg") || picPath.endsWith(".JPG"))) {
          photoUri = Uri.fromFile(new File(picPath));
          if (Build.VERSION.SDK_INT > 23) {
            photoUri = FileProvider.getUriForFile(this, "com.innopro.bamboo.fileprovider", new File(picPath));
            cropForN(picPath, CROP_PICTURE);
          } else {
            startPhotoZoom(photoUri, CROP_PICTURE);
          }
        } else {
          //錯誤提示
        }
      }
      if (requestCode == CROP_PICTURE) {
        if (photoUri != null) {
          Bitmap bitmap = BitmapFactory.decodeFile(picPath);
          if (bitmap != null) {
            photo_iv.setImageBitmap(bitmap);
          }
        }
      }
    }
  }

  /**
   * 拍照獲取圖片
   */
  private void takePictures() {
    //執(zhí)行拍照前,應該先判斷SD卡是否存在
    String SDState = Environment.getExternalStorageState();
    if (SDState.equals(Environment.MEDIA_MOUNTED)) {
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      ContentValues values = new ContentValues();
      photoUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
      startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO);
    } else {
      Toast.makeText(this, "手機未插入內存卡", Toast.LENGTH_LONG).show();
    }
  }


  /**
   * 圖片裁剪,參數(shù)根據(jù)自己需要設置
   *
   * @param uri
   * @param REQUE_CODE_CROP
   */
  private void startPhotoZoom(Uri uri,
                int REQUE_CODE_CROP) {
    int dp = 500;
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image/*");
    // 下面這個crop=true是設置在開啟的Intent中設置顯示的VIEW可裁剪
    intent.putExtra("crop", "true");
    intent.putExtra("scale", true);// 去黑邊
    intent.putExtra("scaleUpIfNeeded", true);// 去黑邊
    // aspectX aspectY 是寬高的比例
    intent.putExtra("aspectX", 4);//輸出是X方向的比例
    intent.putExtra("aspectY", 3);
    intent.putExtra("outputX", 600);//輸出X方向的像素
    intent.putExtra("outputY", 450);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", true);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
    intent.putExtra("return-data", false);//設置為不返回數(shù)據(jù)
    startActivityForResult(intent, REQUE_CODE_CROP);
  }

  /**
   * 7.0以上版本圖片裁剪操作
   *
   * @param imagePath
   * @param REQUE_CODE_CROP
   */
  private void cropForN(String imagePath, int REQUE_CODE_CROP) {
    Uri cropUri = getImageContentUri(new File(imagePath));
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(cropUri, "image/*");
    intent.putExtra("crop", "true");
    //輸出是X方向的比例
    intent.putExtra("aspectX", 4);
    intent.putExtra("aspectY", 3);
    // outputX outputY 是裁剪圖片寬高
    intent.putExtra("outputX", 600);
    intent.putExtra("outputY", 450);
    intent.putExtra("scale", true);
    intent.putExtra("return-data", false);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, cropUri);
    intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
    intent.putExtra("noFaceDetection", true);
    startActivityForResult(intent, REQUE_CODE_CROP);
  }

  private Uri getImageContentUri(File imageFile) {
    String filePath = imageFile.getAbsolutePath();
    Cursor cursor = getContentResolver().query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        new String[]{MediaStore.Images.Media._ID},
        MediaStore.Images.Media.DATA + "=? ",
        new String[]{filePath}, null);

    if (cursor != null && cursor.moveToFirst()) {
      int id = cursor.getInt(cursor
          .getColumnIndex(MediaStore.MediaColumns._ID));
      Uri baseUri = Uri.parse("content://media/external/images/media");
      return Uri.withAppendedPath(baseUri, "" + id);
    } else {
      if (imageFile.exists()) {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.DATA, filePath);
        return getContentResolver().insert(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
      } else {
        return null;
      }
    }
  }

  /**
   * 安卓6.0以上版本權限處理
   */
  private void permissionForM() {
    if (ContextCompat.checkSelfPermission(this,
        Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,
        Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this,
        Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

      ActivityCompat.requestPermissions(this,
          new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
          PERMISSIONS_FOR_TAKE_PHOTO);
    } else {
      takePictures();
    }
  }

  @Override
  public void onRequestPermissionsResult(int requestCode,
                      @NonNull String[] permissions, @NonNull int[] grantResults) {

    if (requestCode == PERMISSIONS_FOR_TAKE_PHOTO) {
      if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        takePictures();
      }
      return;
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  }

}

–主界面布局——–




  

–AndroidManifest.xml添加provider——–

   
      
    

–資源文件下添加xml文件夾及file_paths文件——–



  
    
  

以上是“Android如何實現(xiàn)拍照及圖片裁剪”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


當前題目:Android如何實現(xiàn)拍照及圖片裁剪
當前鏈接:http://weahome.cn/article/popcop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部