@@ -1,22 +1,26 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					package   cc.winboll.studio.powerbell.activities ; 
 
					 
					 
					 
					package   cc.winboll.studio.powerbell.activities ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   android.Manifest ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.app.Activity ; 
 
					 
					 
					 
					import   android.app.Activity ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.content.Context ; 
 
					 
					 
					 
					import   android.content.Context ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.content.Intent ; 
 
					 
					 
					 
					import   android.content.Intent ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   android.content.pm.PackageManager ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.graphics.Bitmap ; 
 
					 
					 
					 
					import   android.graphics.Bitmap ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   android.graphics.BitmapFactory ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.graphics.drawable.Drawable ; 
 
					 
					 
					 
					import   android.graphics.drawable.Drawable ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.net.Uri ; 
 
					 
					 
					 
					import   android.net.Uri ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   android.os.Build ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.os.Bundle ; 
 
					 
					 
					 
					import   android.os.Bundle ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.provider.MediaStore ; 
 
					 
					 
					 
					import   android.provider.MediaStore ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.view.View ; 
 
					 
					 
					 
					import   android.view.View ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.widget.ImageView ; 
 
					 
					 
					 
					import   android.widget.ImageView ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   android.widget.Toas t ; 
 
					 
					 
					 
					import   androidx.core.app.ActivityCompa t ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   androidx.core.content.ContextCompat ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.libaes.views.AToolbar ; 
 
					 
					 
					 
					import   cc.winboll.studio.libaes.views.AToolbar ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.libappbase.LogUtils ; 
 
					 
					 
					 
					import   cc.winboll.studio.libappbase.LogUtils ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.libappbase.utils.ToastUtils ; 
 
					 
					 
					 
					import   cc.winboll.studio.libappbase.utils.ToastUtils ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.App ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.App ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.R ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.R ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.activities.BackgroundPictureActivity ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.beans.BackgroundPictureBean ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.beans.BackgroundPictureBean ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.dialogs.BackgroundPicturePreviewDialog ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.utils.BackgroundPictureUtils ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.utils.BackgroundPictureUtils ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -24,42 +28,35 @@ import cc.winboll.studio.powerbell.utils.FileUtils;
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   cc.winboll.studio.powerbell.utils.UriUtil ; 
 
					 
					 
					 
					import   cc.winboll.studio.powerbell.utils.UriUtil ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   java.io.BufferedOutputStream ; 
 
					 
					 
					 
					import   java.io.BufferedOutputStream ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   java.io.File ; 
 
					 
					 
					 
					import   java.io.File ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					import   java.io.FileNotFoundException ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   java.io.FileOutputStream ; 
 
					 
					 
					 
					import   java.io.FileOutputStream ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   java.io.IOException ; 
 
					 
					 
					 
					import   java.io.IOException ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import   java.io.OutputStream ; 
 
					 
					 
					 
					import   java.io.OutputStream ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					public   class  BackgroundPictureActivity   extends   Activity 
 
					 
					 
					 
					public   class  BackgroundPictureActivity   extends   Activity   implements   BackgroundPicturePreviewDialog . IOnRecivedPictureListener   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					implements   BackgroundPicturePreviewDialog . IOnRecivedPictureListener   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   static   final   String   TAG   =   " BackgroundPictureActivity " ; 
 
					 
					 
					 
					     public   static   final   String   TAG   =   " BackgroundPictureActivity " ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   BackgroundPictureUtils   mBackgroundPictureUtils ; 
 
					 
					 
					 
					     public   BackgroundPictureUtils   mBackgroundPictureUtils ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 图片选择请求 
 
					 
					 
					 
					     // 图片选择请求码  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     public   static   final   int   REQUEST_SELECT_PICTURE   =   0 ; 
 
					 
					 
					 
					     public   static   final   int   REQUEST_SELECT_PICTURE   =   0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 照相选择请求 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   static   final   int   REQUEST_TAKE_PHOTO   =   1 ; 
 
					 
					 
					 
					     public   static   final   int   REQUEST_TAKE_PHOTO   =   1 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 图片裁剪选择请求 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   static   final   int   REQUEST_CROP_IMAGE   =   2 ; 
 
					 
					 
					 
					     public   static   final   int   REQUEST_CROP_IMAGE   =   2 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     private   static   final   int   STORAGE_PERMISSION_REQUEST   =   100 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     AToolbar   mAToolbar ; 
 
					 
					 
					 
					     private   AToolbar   mAToolbar ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 所有 图片存储的 文件夹 
 
					 
					 
					 
					    private   File   mfBackgroundDir ;          // 背景 图片存储文件夹 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     File   mfBackgroundDir ; 
 
					 
					 
					 
					     private   File   mfPictureDir ;            // 拍照与剪裁临时文件夹 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 拍照与剪裁的 文件夹  
 
					 
					 
					 
					    private   File   mfTakePhoto ;              // 拍照文件 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     File   mfPictureDir  ; 
 
					 
					 
					 
					     private   File   mfRecived Picture ;        // 接收的图片文件 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 拍照 文件类 
 
					 
					 
					 
					     private   File   mfTempCropPicture ;       // 剪裁临时 文件
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     File   mfTakePhoto ; 
 
					 
					 
					 
					     private   File   mfRecivedCropPicture ;    // 剪裁后的目标文件 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 接收到的图片文件类 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   File   mfRecivedPicture ; 
 
					 
					 
					 
					     // 静态变量 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 剪裁文件类 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     File   mfTempCropPicture ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 剪裁接收后的文件的文件名 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     public   static   String   _mszRecivedCropPicture   =   " RecivedCrop.jpg " ; 
 
					 
					 
					 
					     public   static   String   _mszRecivedCropPicture   =   " RecivedCrop.jpg " ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     File   mfRecivedCropPicture ; 
 
					 
					 
					 
					     private   static   String   _mszCommonFileType   =   " jpeg " ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     static   Str ing   _mszCommonFileType   =   " jpeg " ; 
 
					 
					 
					 
					     private    int   mnPictureCompress   =   100 ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 背景图片的压缩比 
 
					 
					 
					 
					     private   static   String   _RecivedPictureFileName ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     int   mnPictureCompress   =   100 ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     static   String   _RecivedPictureFileName ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     @Override 
 
					 
					 
					 
					     @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     protected   void   onCreate ( Bundle   savedInstanceState )   { 
 
					 
					 
					 
					     protected   void   onCreate ( Bundle   savedInstanceState )   { 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -67,30 +64,29 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         setContentView ( R . layout . activity_backgroundpicture ) ; 
 
					 
					 
					 
					         setContentView ( R . layout . activity_backgroundpicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         initEnv ( ) ; 
 
					 
					 
					 
					         initEnv ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         // 初始化工具类和文件夹 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mBackgroundPictureUtils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
					 
					 
					 
					         mBackgroundPictureUtils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfBackgroundDir   =   new   File ( mBackgroundPictureUtils . getBackgroundDir ( ) ) ; 
 
					 
					 
					 
					         mfBackgroundDir   =   new   File ( mBackgroundPictureUtils . getBackgroundDir ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( ! mfBackgroundDir . exists ( ) )   { 
 
					 
					 
					 
					         if   ( ! mfBackgroundDir . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             mfBackgroundDir . mkdirs ( ) ; 
 
					 
					 
					 
					             mfBackgroundDir . mkdirs ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //mfPictureDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), getString(R.string.app_projectname)); 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         mfPictureDir   =   new   File ( App . getTempDirPath ( ) ) ; 
 
					 
					 
					 
					         mfPictureDir   =   new   File ( App . getTempDirPath ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( ! mfPictureDir . exists ( ) )   { 
 
					 
					 
					 
					         if   ( ! mfPictureDir . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             mfPictureDir . mkdirs ( ) ; 
 
					 
					 
					 
					             mfPictureDir . mkdirs ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         // 初始化文件对象 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfTakePhoto   =   new   File ( mfPictureDir ,   " TakePhoto.jpg " ) ; 
 
					 
					 
					 
					         mfTakePhoto   =   new   File ( mfPictureDir ,   " TakePhoto.jpg " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfTempCropPicture   =   new   File ( mfPictureDir ,   " TempCrop.jpg " ) ; 
 
					 
					 
					 
					         mfTempCropPicture   =   new   File ( mfPictureDir ,   " TempCrop.jpg " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
					 
					 
					 
					         mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfRecivedCropPicture   =   new   File ( mfBackgroundDir ,   _mszRecivedCropPicture ) ; 
 
					 
					 
					 
					         mfRecivedCropPicture   =   new   File ( mfBackgroundDir ,   _mszRecivedCropPicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 初始化工具栏 
 
					 
					 
					 
					         // 初始化工具栏 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mAToolbar   =   ( AToolbar )   findViewById ( R . id . toolbar ) ; 
 
					 
					 
					 
					         mAToolbar   =   ( AToolbar )   findViewById ( R . id . toolbar ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         setActionBar ( mAToolbar ) ; 
 
					 
					 
					 
					         setActionBar ( mAToolbar ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //mAToolbar.setTitle(getTitle() + "-" + getString(R.string.subtitle_activity_backgroundpicture)); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mAToolbar . setSubtitle ( R . string . subtitle_activity_backgroundpicture ) ; 
 
					 
					 
					 
					         mAToolbar . setSubtitle ( R . string . subtitle_activity_backgroundpicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //mAToolbar.setTitleTextAppearance(this, R.style.Toolbar_TitleText); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //mAToolbar.setSubtitleTextAppearance(this, R.style.Toolbar_SubTitleText); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //mAToolbar.setBackgroundColor(getColor(R.color.colorPrimary)); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         setActionBar ( mAToolbar ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         getActionBar ( ) . setDisplayHomeAsUpEnabled ( true ) ; 
 
					 
					 
					 
					         getActionBar ( ) . setDisplayHomeAsUpEnabled ( true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mAToolbar . setNavigationOnClickListener ( new   View . OnClickListener ( )   { 
 
					 
					 
					 
					         mAToolbar . setNavigationOnClickListener ( new   View . OnClickListener ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 @Override 
 
					 
					 
					 
					                 @Override 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -99,7 +95,7 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 } 
 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } ) ; 
 
					 
					 
					 
					             } ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //给按钮设置 点击事件 
 
					 
					 
					 
					         // 设置按钮 点击事件 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton5 ) . setOnClickListener ( onOriginNullClickListener ) ; 
 
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton5 ) . setOnClickListener ( onOriginNullClickListener ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton4 ) . setOnClickListener ( onReceivedPictureClickListener ) ; 
 
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton4 ) . setOnClickListener ( onReceivedPictureClickListener ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton1 ) . setOnClickListener ( onTakePhotoClickListener ) ; 
 
					 
					 
					 
					         findViewById ( R . id . activitybackgroundpictureAButton1 ) . setOnClickListener ( onTakePhotoClickListener ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -109,31 +105,18 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         updatePreviewBackground ( ) ; 
 
					 
					 
					 
					         updatePreviewBackground ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					         // 处理分享的图片 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 判断并且处理应用分享到的文件 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //ToastUtils.show("Activity Opened."); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 预备接收参数 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         Intent   intent   =   getIntent ( ) ; 
 
					 
					 
					 
					         Intent   intent   =   getIntent ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         String   action   =   intent . getAction ( ) ; 
 
					 
					 
					 
					         String   action   =   intent . getAction ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         String   type   =   intent . getType ( ) ; 
 
					 
					 
					 
					         String   type   =   intent . getType ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //LogUtils.d(TAG, "action : " + action); 
 
					 
					 
					 
					         if   ( Intent . ACTION_SEND . equals ( action )   & &   type   ! =   null   & &   isImageType ( type ) )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					        //LogUtils.d(TAG, "type : " + type) ; 
 
					 
					 
					 
					             BackgroundPicturePreviewDialog   dlg   =   new   BackgroundPicturePreviewDialog ( this )  ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 判断是否进入图片分享状态 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( Intent . ACTION_SEND . equals ( action ) 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             & &   type   ! =   null 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             & &   ( " image/* " . equals ( type )   | |   " image/jpeg " . equals ( type )   | |   " image/jpg " . equals ( type )   | |   " image/png " . equals ( type )   | |   " image/webp " . equals ( type ) ) )   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 预览图片 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             BackgroundPicturePreviewDialog   dlg =   new   BackgroundPicturePreviewDialog ( this ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             dlg . show ( ) ; 
 
					 
					 
					 
					             dlg . show ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     void   initEnv ( )   { 
 
					 
					 
					 
					     private   void   initEnv ( )   { 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         LogUtils . d ( TAG ,   " initEnv() " ) ; 
 
					 
					 
					 
					         LogUtils . d ( TAG ,   " initEnv() " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         _RecivedPictureFileName   =   " Recived.data " ; 
 
					 
					 
					 
					         _RecivedPictureFileName   =   " Recived.data " ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -144,47 +127,55 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     @Override 
 
					 
					 
					 
					     @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   void   onAcceptRecivedPicture ( String   szPreRecivedPictureName )   { 
 
					 
					 
					 
					     public   void   onAcceptRecivedPicture ( String   szPreRecivedPictureName )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //ToastUtils.show("onAcceptRecivedPicture"); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
					 
					 
					 
					         BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         utils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
					 
					 
					 
					         utils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         utils . saveData ( ) ; 
 
					 
					 
					 
					         utils . saveData ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         File   fPreRecivedPictureName   =   new   File ( utils . getBackgroundDir ( ) ,   szPreRecivedPictureName ) ; 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					         FileUtils . copyFile ( fPreRecivedPictureName  ,   mf RecivedPicture) ; 
 
					 
					 
					 
					         File  sourceFile   =   new   File ( utils . getBackgroundDir ( )  ,   szPre RecivedPictureName ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 加载背景 
 
					 
					 
					 
					         if   ( FileUtils . copyFile ( sourceFile ,   mfRecivedPicture ) )   { 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             startCropImageActivity ( false ) ; 
 
					 
					 
					 
					             startCropImageActivity ( false ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 图片复制失败,请重试 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 
 
					 
					 
					 
					     /** 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 更新预览背景 
 
					 
					 
					 
					      * 更新背景图片预览 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     / /
 
					 
					 
					 
					      * /
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					     public   void   updatePreviewBackground ( )   { 
 
					 
					 
					 
					     public   void   updatePreviewBackground ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         LogUtils . d ( TAG ,   " updatePreviewBackground " ) ; 
 
					 
					 
					 
					         LogUtils . d ( TAG ,   " updatePreviewBackground " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         ImageView   ivPreviewBackground   =   findViewById ( R . id . activitybackgroundpictureImageView1 ) ; 
 
					 
					 
					 
					         ImageView   ivPreviewBackground   =  ( ImageView )    findViewById ( R . id . activitybackgroundpictureImageView1 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
					 
					 
					 
					         BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         utils . loadBackgroundPictureBean ( ) ; 
 
					 
					 
					 
					         utils . loadBackgroundPictureBean ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         boolean   isUseBackgroundFile   =   utils . getBackgroundPictureBean ( ) . isUseBackgroundFile ( ) ; 
 
					 
					 
					 
					         boolean   isUseBackgroundFile   =   utils . getBackgroundPictureBean ( ) . isUseBackgroundFile ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( isUseBackgroundFile   & &   mfRecivedCropPicture . exists ( ) )   { 
 
					 
					 
					 
					         if   ( isUseBackgroundFile   & &   mfRecivedCropPicture . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             try   { 
 
					 
					 
					 
					             try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 String   szBackgroundF ilePath  =   utils . getBackgroundDir ( )   +   getBackgroundFileName ( ) ; 
 
					 
					 
					 
					                 String   f ilePath  =   utils . getBackgroundDir ( )   +   getBackgroundFileName ( ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 Drawable   drawableBackground    =   FileUtils . getImageDrawable ( szBackgroundF ilePath) ; 
 
					 
					 
					 
					                 Drawable   drawable   =   FileUtils . getImageDrawable ( f ilePath) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 drawableBackground . setAlpha ( 120 ) ; 
 
					 
					 
					 
					                 if   ( drawable   ! =   null )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                ivPreviewBackground . setImageDrawable ( drawableBackground  ) ; 
 
					 
					 
					 
					                     drawable . setAlpha ( 120  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                ToastUtils . show ( " Use acceptRecived background. "  ) ; 
 
					 
					 
					 
					                     ivPreviewBackground . setImageDrawable ( drawable  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 背景图片已更新 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             }   catch   ( IOException   e )   { 
 
					 
					 
					 
					             }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
					 
					 
					 
					                 LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 背景图片加载失败 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         }   else   { 
 
					 
					 
					 
					         }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             ToastUtils . show ( "  No background. " ) ; 
 
					 
					 
					 
					             ToastUtils . show ( " 未使用背景图片 " ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             Drawable   drawableBackground    =   getDrawable ( R . drawable . blank10x10 ) ; 
 
					 
					 
					 
					             Drawable   drawable   =   getResources ( ) .  getDrawable( R . drawable . blank10x10 ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             drawableBackground . setAlpha ( 120 ) ; 
 
					 
					 
					 
					             if   ( drawable   ! =   null )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            ivPreviewBackground . setImageDrawable ( drawableBackground  ) ; 
 
					 
					 
					 
					                 drawable . setAlpha ( 120  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ivPreviewBackground . setImageDrawable ( drawable ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     // 点击事件监听器 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     private   View . OnClickListener   onOriginNullClickListener   =   new   View . OnClickListener ( )   { 
 
					 
					 
					 
					     private   View . OnClickListener   onOriginNullClickListener   =   new   View . OnClickListener ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         @Override 
 
					 
					 
					 
					         @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 选择原始空白背景 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( BackgroundPictureActivity . this ) ; 
 
					 
					 
					 
					             BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( BackgroundPictureActivity . this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             BackgroundPictureBean   bean   =   utils . getBackgroundPictureBean ( ) ; 
 
					 
					 
					 
					             BackgroundPictureBean   bean   =   utils . getBackgroundPictureBean ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             bean . setIsUseBackgroundFile ( false ) ; 
 
					 
					 
					 
					             bean . setIsUseBackgroundFile ( false ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -196,12 +187,11 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     private   View . OnClickListener   onSelectPictureClickListener   =   new   View . OnClickListener ( )   { 
 
					 
					 
					 
					     private   View . OnClickListener   onSelectPictureClickListener   =   new   View . OnClickListener ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         @Override 
 
					 
					 
					 
					         @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 导入外部图片 
 
					 
					 
					 
					             if   ( checkAndRequestStoragePermission ( ) )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             Intent   intent   =   new   Intent ( 
 
					 
					 
					 
					                  Intent   intent   =   new   Intent ( Intent . ACTION_PICK ,   MediaStore . Images . Media . EXTERNAL_CONTENT_URI ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 Intent . ACTION_PICK , 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 android . provider . MediaStore . Images . Media . EXTERNAL_CONTENT_URI ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                 startActivityForResult ( intent ,   REQUEST_SELECT_PICTURE ) ; 
 
					 
					 
					 
					                 startActivityForResult ( intent ,   REQUEST_SELECT_PICTURE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } ; 
 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     private   View . OnClickListener   onCropPictureClickListener   =   new   View . OnClickListener ( )   { 
 
					 
					 
					 
					     private   View . OnClickListener   onCropPictureClickListener   =   new   View . OnClickListener ( )   { 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -211,7 +201,7 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( fCheck . exists ( ) )   { 
 
					 
					 
					 
					             if   ( fCheck . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 startCropImageActivity ( false ) ; 
 
					 
					 
					 
					                 startCropImageActivity ( false ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             }   else   { 
 
					 
					 
					 
					             }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 ToastUtils . show ( " There is not any picture to crop. " ) ; 
 
					 
					 
					 
					                 ToastUtils . show ( " 没有可剪裁的图片 " ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } ; 
 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -223,7 +213,7 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( fCheck . exists ( ) )   { 
 
					 
					 
					 
					             if   ( fCheck . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 startCropImageActivity ( true ) ; 
 
					 
					 
					 
					                 startCropImageActivity ( true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             }   else   { 
 
					 
					 
					 
					             }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 ToastUtils . show ( " There is not any picture to crop. " ) ; 
 
					 
					 
					 
					                 ToastUtils . show ( " 没有可剪裁的图片 " ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } ; 
 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -233,6 +223,7 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   " onTakePhotoClickListener " ) ; 
 
					 
					 
					 
					             LogUtils . d ( TAG ,   " onTakePhotoClickListener " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   " mfTakePhoto :  "   +   mfTakePhoto . getPath ( ) ) ; 
 
					 
					 
					 
					             LogUtils . d ( TAG ,   " mfTakePhoto :  "   +   mfTakePhoto . getPath ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( mfTakePhoto . exists ( ) )   { 
 
					 
					 
					 
					             if   ( mfTakePhoto . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mfTakePhoto . delete ( ) ; 
 
					 
					 
					 
					                 mfTakePhoto . delete ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -240,16 +231,20 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mfTakePhoto . createNewFile ( ) ; 
 
					 
					 
					 
					                 mfTakePhoto . createNewFile ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             }   catch   ( IOException   e )   { 
 
					 
					 
					 
					             }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
					 
					 
					 
					                 LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 拍照文件创建失败 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( checkAndRequestStoragePermission ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 Intent   takePictureIntent   =   new   Intent ( MediaStore . ACTION_IMAGE_CAPTURE ) ; 
 
					 
					 
					 
					                 Intent   takePictureIntent   =   new   Intent ( MediaStore . ACTION_IMAGE_CAPTURE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 startActivityForResult ( takePictureIntent ,   REQUEST_TAKE_PHOTO ) ; 
 
					 
					 
					 
					                 startActivityForResult ( takePictureIntent ,   REQUEST_TAKE_PHOTO ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } ; 
 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     private   View . OnClickListener   onReceivedPictureClickListener   =   new   View . OnClickListener ( )   { 
 
					 
					 
					 
					     private   View . OnClickListener   onReceivedPictureClickListener   =   new   View . OnClickListener ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         @Override 
 
					 
					 
					 
					         @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
					 
					 
					 
					         public   void   onClick ( View   v )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 选择接收到的背景图片 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( BackgroundPictureActivity . this ) ; 
 
					 
					 
					 
					             BackgroundPictureUtils   utils   =   BackgroundPictureUtils . getInstance ( BackgroundPictureActivity . this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             utils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
					 
					 
					 
					             utils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             utils . saveData ( ) ; 
 
					 
					 
					 
					             utils . saveData ( ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -257,39 +252,49 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } ; 
 
					 
					 
					 
					     } ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 压缩图片并保存到接收文件 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     void   compressQualityToRecivedPicture ( Bitmap   bitmap )   { 
 
					 
					 
					 
					     void   compressQualityToRecivedPicture ( Bitmap   bitmap )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 设置输出流 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         OutputStream   outStream   =   null ; 
 
					 
					 
					 
					         OutputStream   outStream   =   null ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         try   { 
 
					 
					 
					 
					         try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 创建输出流对象,准备写入压缩后的图片文件 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
					 
					 
					 
					             mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 创建新的接收文件 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( ! mfRecivedPicture . exists ( ) )   { 
 
					 
					 
					 
					             if   ( ! mfRecivedPicture . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mfRecivedPicture . createNewFile ( ) ; 
 
					 
					 
					 
					                 mfRecivedPicture . createNewFile ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             FileOutputStream   fos   =   new   FileOutputStream ( mfRecivedPicture ) ; 
 
					 
					 
					 
					             FileOutputStream   fos   =   new   FileOutputStream ( mfRecivedPicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 获取输出流对象 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             outStream   =   new   BufferedOutputStream ( fos ) ; 
 
					 
					 
					 
					             outStream   =   new   BufferedOutputStream ( fos ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					             bitmap . compress ( Bitmap . CompressFormat . JPEG ,   100 ,   outStream ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 使用默认的质量参数压缩图片 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             bitmap . compress ( Bitmap . CompressFormat . JPEG ,   100 ,   outStream ) ;   // 70% 的质量 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 关闭输出流以完成文件操作 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             outStream . flush ( ) ; 
 
					 
					 
					 
					             outStream . flush ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 图片压缩失败 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   finally   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( outStream   ! =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     outStream . close ( ) ; 
 
					 
					 
					 
					                     outStream . close ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 }   catch   ( IOException   e )   { 
 
					 
					 
					 
					                 }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
					 
					 
					 
					                     LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 } 
 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( bitmap   ! =   null   & &   ! bitmap . isRecycled ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 bitmap . recycle ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 启动图片裁剪活动 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * @param isCropFree 是否自由裁剪 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     public   void   startCropImageActivity ( boolean   isCropFree )   { 
 
					 
					 
					 
					     public   void   startCropImageActivity ( boolean   isCropFree )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         LogUtils . d ( TAG ,   " startCropImageActivity " ) ; 
 
					 
					 
					 
					         LogUtils . d ( TAG ,   " startCropImageActivity " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         BackgroundPictureBean   bean   =   mBackgroundPictureUtils . loadBackgroundPictureBean ( ) ; 
 
					 
					 
					 
					         BackgroundPictureBean   bean   =   mBackgroundPictureUtils . loadBackgroundPictureBean ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
					 
					 
					 
					         mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         Uri   uri   =   UriUtil . getUriForFile ( this ,   mfRecivedPicture ) ; 
 
					 
					 
					 
					         Uri   uri   =   UriUtil . getUriForFile ( this ,   mfRecivedPicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         LogUtils . d ( TAG ,   " uri :  "   +   uri . toString ( ) ) ; 
 
					 
					 
					 
					         LogUtils . d ( TAG ,   " uri :  "   +   uri . toString ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( mfTempCropPicture . exists ( ) )   { 
 
					 
					 
					 
					         if   ( mfTempCropPicture . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             mfTempCropPicture . delete ( ) ; 
 
					 
					 
					 
					             mfTempCropPicture . delete ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -297,27 +302,24 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             mfTempCropPicture . createNewFile ( ) ; 
 
					 
					 
					 
					             mfTempCropPicture . createNewFile ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         }   catch   ( IOException   e )   { 
 
					 
					 
					 
					         }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
					 
					 
					 
					             LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 剪裁临时文件创建失败 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 使用正确的文件路径构建 Uri 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         Uri   cropOutPutUri   =   Uri . fromFile ( mfTempCropPicture ) ; 
 
					 
					 
					 
					         Uri   cropOutPutUri   =   Uri . fromFile ( mfTempCropPicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         LogUtils . d ( TAG ,   " mfTempCropPicture :  "   +   mfTempCropPicture . getPath ( ) ) ; 
 
					 
					 
					 
					         LogUtils . d ( TAG ,   " mfTempCropPicture :  "   +   mfTempCropPicture . getPath ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         Intent   intent   =   new   Intent ( " com.android.camera.action.CROP " ) ; 
 
					 
					 
					 
					         Intent   intent   =   new   Intent ( " com.android.camera.action.CROP " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . setDataAndType ( uri ,   " image/ "   +   _mszCommonFileType ) ; 
 
					 
					 
					 
					         intent . setDataAndType ( uri ,   " image/ "   +   _mszCommonFileType ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( " crop " ,   " true " ) ; 
 
					 
					 
					 
					         intent . putExtra ( " crop " ,   " true " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( " noFaceDetection " ,   true ) ; 
 
					 
					 
					 
					         intent . putExtra ( " noFaceDetection " ,   true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( ! isCropFree )   { 
 
					 
					 
					 
					         if   ( ! isCropFree )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             // aspectX aspectY 是宽高的比例 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             intent . putExtra ( " aspectX " ,   bean . getBackgroundWidth ( ) ) ; 
 
					 
					 
					 
					             intent . putExtra ( " aspectX " ,   bean . getBackgroundWidth ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             intent . putExtra ( " aspectY " ,   bean . getBackgroundHeight ( ) ) ; 
 
					 
					 
					 
					             intent . putExtra ( " aspectY " ,   bean . getBackgroundHeight ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         // outputX outputY 是裁剪图片宽高 
 
					 
					 
					 
					
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					         //intent.putExtra("outputX", 100); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //intent.putExtra("outputY", 100); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //return-data =false 意味着裁剪成功后不能在onActivityResult 的intent 中获得图片 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //intent.putExtra("return-data", false); 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( " return-data " ,   true ) ; 
 
					 
					 
					 
					         intent . putExtra ( " return-data " ,   true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         //裁剪后的图片输出至  cropOutPutUri 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( MediaStore . EXTRA_OUTPUT ,   cropOutPutUri ) ; 
 
					 
					 
					 
					         intent . putExtra ( MediaStore . EXTRA_OUTPUT ,   cropOutPutUri ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( " scale " ,   true ) ; 
 
					 
					 
					 
					         intent . putExtra ( " scale " ,   true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         intent . putExtra ( " outputFormat " ,   Bitmap . CompressFormat . JPEG . toString ( ) ) ; 
 
					 
					 
					 
					         intent . putExtra ( " outputFormat " ,   Bitmap . CompressFormat . JPEG . toString ( ) ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -325,12 +327,101 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         startActivityForResult ( intent ,   REQUEST_CROP_IMAGE ) ; 
 
					 
					 
					 
					         startActivityForResult ( intent ,   REQUEST_CROP_IMAGE ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 启动裁剪窗口,裁剪操作文件为 uirImage 
 
					 
					 
					 
					     /** 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					     // 
 
					 
					 
					 
					      * 保存剪裁后的Bitmap(  优化版)  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     private   void   saveCropBitmap ( Bitmap   bitmap )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( bitmap   = =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 剪裁图片为空 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         // 内存优化:大图片自动缩放 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         Bitmap   scaledBitmap   =   bitmap ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( bitmap . getByteCount ( )   >   10   *   1024   *   1024 )   {   // 超过10MB 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             float   scale   =   1 . 0f ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             while   ( scaledBitmap . getByteCount ( )   >   5   *   1024   *   1024 )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 scale   - =   0 . 2f ;   // 每次缩小20% 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 if   ( scale   <   0 . 2f )   break ;   // 最小缩放到20% 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 scaledBitmap   =   scaleBitmap ( scaledBitmap ,   scale ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( scaledBitmap   ! =   bitmap )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 bitmap . recycle ( ) ;   // 回收原Bitmap 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         // 优化:创建保存目录 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         File   backgroundDir   =   new   File ( mBackgroundPictureUtils . getBackgroundDir ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( ! backgroundDir . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( ! backgroundDir . mkdirs ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 无法创建保存目录 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 if   ( scaledBitmap   ! =   bitmap )   scaledBitmap . recycle ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         File   saveFile   =   new   File ( backgroundDir ,   getBackgroundFileName ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         // 优化:检查文件是否可写 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( saveFile . exists ( )   & &   ! saveFile . canWrite ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( ! saveFile . delete ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 无法删除旧文件 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 if   ( scaledBitmap   ! =   bitmap )   scaledBitmap . recycle ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         FileOutputStream   fos   =   null ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             fos   =   new   FileOutputStream ( saveFile ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             boolean   success   =   scaledBitmap . compress ( Bitmap . CompressFormat . JPEG ,   80 ,   fos ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             fos . flush ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( success )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 保存成功 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 // 更新数据 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 mBackgroundPictureUtils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 updatePreviewBackground ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 图片压缩保存失败 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   catch   ( FileNotFoundException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             LogUtils . e ( TAG ,   " 文件未找到 "   +   e ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 保存失败:文件路径错误 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             LogUtils . e ( TAG ,   " 写入异常 "   +   e ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 保存失败:磁盘可能已满或路径错误 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   finally   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( fos   ! =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     fos . close ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 }   catch   ( IOException   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     LogUtils . e ( TAG ,   " 流关闭异常 "   +   e ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( scaledBitmap   ! =   null   & &   ! scaledBitmap . isRecycled ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 scaledBitmap . recycle ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 缩放Bitmap 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     private   Bitmap   scaleBitmap ( Bitmap   original ,   float   scale )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( original   = =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             return   null ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         int   width   =   ( int )   ( original . getWidth ( )   *   scale ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         int   height   =   ( int )   ( original . getHeight ( )   *   scale ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         return   Bitmap . createScaledBitmap ( original ,   width ,   height ,   true ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 分享图片 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     void   sharePicture ( )   { 
 
					 
					 
					 
					     void   sharePicture ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         Uri   uri   =   UriUtil . getUriForFile ( this ,   mfRecivedPicture ) ; 
 
					 
					 
					 
					         Uri   uri   =   UriUtil . getUriForFile ( this ,   mfRecivedPicture ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         Intent   shareIntent   =   new   Intent ( ) ;      
 
					 
					 
					 
					         Intent   shareIntent   =   new   Intent ( Intent . ACTION_SEND ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					         shareIntent . setAction ( Intent . ACTION_SEND ) ;      
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					         shareIntent . putExtra ( Intent . EXTRA_STREAM ,   uri ) ; 
 
					 
					 
					 
					         shareIntent . putExtra ( Intent . EXTRA_STREAM ,   uri ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         shareIntent . setType ( " image/ "   +   _mszCommonFileType ) ; 
 
					 
					 
					 
					         shareIntent . setType ( " image/ "   +   _mszCommonFileType ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         shareIntent . addFlags ( Intent . FLAG_GRANT_READ_URI_PERMISSION ) ; 
 
					 
					 
					 
					         shareIntent . addFlags ( Intent . FLAG_GRANT_READ_URI_PERMISSION ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
					
						
					 
					 
					@@ -345,45 +436,107 @@ implements BackgroundPicturePreviewDialog.IOnRecivedPictureListener {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     @Override 
 
					 
					 
					 
					     @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     protected   void   onActivityResult ( int   requestCode ,   int   resultCode ,   Intent   data )   { 
 
					 
					 
					 
					     protected   void   onActivityResult ( int   requestCode ,   int   resultCode ,   Intent   data )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         super . onActivityResult ( requestCode ,   resultCode ,   data ) ; 
 
					 
					 
					 
					         super . onActivityResult ( requestCode ,   resultCode ,   data ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         if   ( requestCode   = =   REQUEST_SELECT_PICTURE )   { 
 
					 
					 
					 
					         if   ( requestCode   = =   REQUEST_SELECT_PICTURE   & &   resultCode   = =   RESULT_OK )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             // 处理选择后图片 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( resultCode   = =   RESULT_OK )   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             try   { 
 
					 
					 
					 
					             try   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 Uri   selectedImage   =   data . getData ( ) ; 
 
					 
					 
					 
					                 Uri   selectedImage   =   data . getData ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 LogUtils . d ( TAG ,   " Uri is :  "   +   selectedImage . toString ( ) ) ; 
 
					 
					 
					 
					                 LogUtils . d ( TAG ,   " Uri is :  "   +   selectedImage . toString ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 File   fSrcImage   =   new   File ( UriUtil . getFilePathFromUri ( this ,   selectedImage ) ) ; 
 
					 
					 
					 
					                 File   fSrcImage   =   new   File ( UriUtil . getFilePathFromUri ( this ,   selectedImage ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
					 
					 
					 
					                 mfRecivedPicture   =   getRecivedPictureFile ( this ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					                 if   ( FileUtils . copyFile ( fSrcImage ,   mfRecivedPicture ) )   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                     FileUtils . copyFile ( fSrcImage ,   mfRecivedPicture ) ; 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     // 启动剪裁文件窗口 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					                     startCropImageActivity ( false ) ; 
 
					 
					 
					 
					                     startCropImageActivity ( false ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     ToastUtils . show ( " 图片复制失败,请重试 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             }   catch   ( Exception   e )   { 
 
					 
					 
					 
					             }   catch   ( Exception   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                      LogUtils . d ( TAG ,   e ,   Thread . currentThread ( ) . getStackTrace ( ) ) ; 
 
					 
					 
					 
					                 LogUtils . e ( TAG ,   " 选择图片异常 "   +   e ) ; 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 选择图片失败: "   +   e . getMessage ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             } 
 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					              } 
 
					 
					 
					 
					         }  else   if   ( requestCode   = =   REQUEST_TAKE_PHOTO   & &   resultCode   = =   RESULT_OK )   {  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					         }   else   if   ( requestCode   = =   REQUEST_TAKE_PHOTO )   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             if   ( resultCode   = =   RESULT_OK )   { 
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   " REQUEST_TAKE_PHOTO " ) ; 
 
					 
					 
					 
					             LogUtils . d ( TAG ,   " REQUEST_TAKE_PHOTO " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             Bundle   extras   =   data . getExtras ( ) ; 
 
					 
					 
					 
					             Bundle   extras   =   data . getExtras ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( extras   ! =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 Bitmap   imageBitmap   =   ( Bitmap )   extras . get ( " data " ) ; 
 
					 
					 
					 
					                 Bitmap   imageBitmap   =   ( Bitmap )   extras . get ( " data " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 if   ( imageBitmap   ! =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     compressQualityToRecivedPicture ( imageBitmap ) ; 
 
					 
					 
					 
					                     compressQualityToRecivedPicture ( imageBitmap ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                     startCropImageActivity ( false ) ; 
 
					 
					 
					 
					                     startCropImageActivity ( false ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     ToastUtils . show ( " 拍照图片为空 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 } 
 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         }   else   if   ( requestCode   = =   REQUEST_CROP_IMAGE )   { 
 
					 
					 
					 
					              }   else   { 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            if   ( resultCode   = =   RESULT_OK )   {  
 
					 
					 
					 
					                 ToastUtils . show ( " 拍照数据获取失败 " ) ;  
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   else   if   ( requestCode   = =   REQUEST_CROP_IMAGE   & &   resultCode   = =   RESULT_OK )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   " CROP_IMAGE_REQUEST_CODE " ) ; 
 
					 
					 
					 
					             LogUtils . d ( TAG ,   " CROP_IMAGE_REQUEST_CODE " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 FileUtils . copyFile ( mfTempCropPicture ,   mfRecivedCropPicture ) ;  
 
					 
					 
					 
					            try   {  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mfTempCropPicture . delete ( ) ; 
 
					 
					 
					 
					                 Bitmap   cropBitmap   =   null ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 mBackgroundPictureUtils . getBackgroundPictureBean ( ) . setIsUseBackgroundFile ( true ) ; 
 
					 
					 
					 
					                 // 方案1:  通过Intent获取剪裁后的Bitmap 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					                 updatePreviewBackground ( ) ; 
 
					 
					 
					 
					                 if   ( data   ! =   null   & &   data . hasExtra ( " data " ) )   { 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     cropBitmap   =   data . getParcelableExtra ( " data " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 }   else   if   ( mfTempCropPicture . exists ( ) )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     cropBitmap   =   BitmapFactory . decodeFile ( mfTempCropPicture . getPath ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     ToastUtils . show ( " 剪裁文件不存在 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     return ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 } 
 
					 
					 
					 
					                 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 if   ( cropBitmap   ! =   null )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                     saveCropBitmap ( cropBitmap ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					                 }   else   { 
 
					 
					 
					 
					                 }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					            String   sz   =   " Unsolved requestCode =  "   +   Integer . toString ( requestCode  ) ; 
 
					 
					 
					 
					                     ToastUtils . show ( " 获取剪裁图片失败 "  ) ; 
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					            Toast . makeText ( getApplication ( ) ,   sz ,   Toast . LENGTH_SHORT ) . show ( ) ;  
 
					 
					 
					 
					                 }  
 
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					             LogUtils . d ( TAG ,   sz ) ; 
 
					 
					 
					 
					             }   catch   ( OutOfMemoryError   e )   { 
 
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 LogUtils . e ( TAG ,   " 内存溢出 "   +   e ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 保存失败:内存不足,请尝试裁剪更小的图片 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             }   catch   ( Exception   e )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 LogUtils . e ( TAG ,   " 剪裁保存异常 "   +   e ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 保存失败: "   +   e . getMessage ( ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } /* finally { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                // 安全删除临时文件 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                if (mfTempCropPicture.exists()) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                    mfTempCropPicture.delete(); 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            }*/ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         }   else   if   ( resultCode   ! =   RESULT_OK )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             LogUtils . d ( TAG ,   " 操作取消或失败,  requestCode:  "   +   requestCode ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             ToastUtils . show ( " 操作已取消 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 检查类型是否为图片 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     private   boolean   isImageType ( String   type )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         return   type . startsWith ( " image/ " )   | |   " image/jpeg " . equals ( type )   | |   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             " image/jpg " . equals ( type )   | |   " image/png " . equals ( type )   | |   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             " image/webp " . equals ( type ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     /** 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     * 检查并申请存储权限 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     */ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     private   boolean   checkAndRequestStoragePermission ( )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( Build . VERSION . SDK_INT   > =   Build . VERSION_CODES . M )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( ContextCompat . checkSelfPermission ( this ,   Manifest . permission . WRITE_EXTERNAL_STORAGE )   ! =   PackageManager . PERMISSION_GRANTED )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ActivityCompat . requestPermissions ( this ,   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                                                   new   String [ ] { Manifest . permission . WRITE_EXTERNAL_STORAGE } ,   
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                                                   STORAGE_PERMISSION_REQUEST ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 return   false ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         return   true ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     @Override 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					     public   void   onRequestPermissionsResult ( int   requestCode ,   String [ ]   permissions ,   int [ ]   grantResults )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         super . onRequestPermissionsResult ( requestCode ,   permissions ,   grantResults ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					         if   ( requestCode   = =   STORAGE_PERMISSION_REQUEST )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             if   ( grantResults . length   >   0   & &   grantResults [ 0 ]   = =   PackageManager . PERMISSION_GRANTED )   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 存储权限已获取 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             }   else   { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                 ToastUtils . show ( " 需要存储权限才能保存图片 " ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					             } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					         } 
 
					 
					 
					 
					         } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					     } 
 
					 
					 
					 
					     } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					}