パブリッククラスRecommendCodeActivityはBaseActivityを拡張します{
private ImageView ivCode;
文字列codeUrl = "";
private int codeId = 0;
プライベートTextView tvId、tvSave;
プライベートLinearLayout llMain;
プライベートTextView mTvRight;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recommend_code);
mLDialog.show();
findViews();
initData(savedInstanceState);
sendRecommendCode();
initViews(savedInstanceState);
}
@Override
protected void findViews(){
ivCode = findViewById(R.id.iv_code);
tvId = findViewById(R.id.tv_id);
llMain = findViewById(R.id.ll_main);
tvSave = findViewById(R.id.tv_save);
}
@Overrideは
ボイドinitViews(バンドルsavedInstanceState){保護
tvSave.setOnClickListener(新しいView.OnClickListener(){
@Override
{公共ボイドのonClick(ビュービュー)
tvSave.setClickable(false);
//関連する権限にストレージ権限を適用します
{試みは、IF(ActivityCompat.checkSelfPermission(RecommendCodeActivity.this、Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(RecommendCodeActivity.this、Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
//が適用されます(またはそれ以上の)権限、およびコールバックにアクセスコード(ユーザー定義)を提供する
ActivityCompat.requestPermissions(RecommendCodeActivity.this、new String [] {Manifest.permission.READ_EXTERNAL_STORAGE、Manifest.permission.WRITE_EXTERNAL_STORAGE}、1);
}その他{
mLDialog.setDialogText( "画像を保存しています...");
mLDialog.show();
saveMyBitmap( "AuthCode"、createViewBitmap(llMain));
}
} catch(Exception e){
e.printStackTrace();
}
}
}) ;
}
//許可アプリケーションのコールバック
@Override
public void onRequestPermissionsResult(int requestCode、
String permissions []、int [] grantResults){
switch(requestCode){
case 1:{
//リクエストがキャンセルされた場合、結果の配列は空です。
if(grantResults.length> 0
&& grantResults [0] == PackageManager.PERMISSION_GRANTED){
mLDialog.setDialogText( "正在保存图片...");
mLDialog.show();
{
saveMyBitmap( "AuthCode"、createViewBitmap(llMain));を試してください 。
} catch(例外e){
e.printStackTrace();
}
} else {
tvSave.setClickable(true);
Toast.makeText(RecommendCodeActivity.this、 "先に読み取りと書き込みのアクセス許可を有効にしてください"、Toast.LENGTH_SHORT).show();
}
return;
}
}
}
// IOストリームを使用して、ビットマップオブジェクトを指定したローカルフォルダーに保存します
public void saveMyBitmap(文字列bitName決勝、決勝ビットマップビットマップ){
新しい新しいThread(Runnableを新新(){
@Override
ます。public void RUN(){
文字列filePathに= Environment.getExternalStorageDirectory()ある、getPath();.
ファイルファイル=新しい新しいファイル(filePathに+「/ DCIM / Camera / "+ bitName +" .png ");
試します{
file.createNewFile();
FileOutputStream fOut = null;
fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG、100、fOut);
メッセージmsg = Message.obtain();
msg.obj = file.getPath();
handler.sendMessage(msg);
//Toast.makeText(PayCodeActivity.this、 "保存成功"、Toast.LENGTH_LONG).show();
fOut.flush();
fOut.close();
} catch(IOException e){
e.printStackTrace();
}
}
})。start();
}
ハンドラハンドラ=新しいハンドラ(){
@Override
公共ボイドのhandleMessage(メッセージmsg){
super.handleMessage(MSG)。
文字列picFile =(文字列)msg.obj;
String [] split = picFile.split( "/");
String fileName = split [split.length-1];
{
MediaStore.Images.Media.insertImage(getApplicationContext().
getContentResolver()、picFile、fileName、null);を試してください 。
} catch(FileNotFoundException e){
e.printStackTrace();
}
//最終通知通知図更新
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE、Uri.parse( "file://"
+ picFile)));
Toast.makeText(RecommendCodeActivity.this、 "图片保存图库成功"、Toast.LENGTH_LONG).show();
if(mLDialog!= null && mLDialog.isShowing()){
mLDialog.dismiss();
}
tvSave.setClickable(true);
}
};
//ビューを画像として保存して、ビットマップオブジェクトを生成します
Bitmap bitmap = Bitmap.createBitmap(v.getWidth()、v.getHeight()、
Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v.draw(canvas);
ビットマップを返す;
}
@Override
protected void initData(Bundle savedInstanceState){
}
@Override
protected String initTitleCenterString(){
return "推論码";
}
}