我有一个用于打印屏幕的活动并保存到图库,它适用于Android OS 5(Lollipop)和更早版本。 为什么OS 6及更高版本的代码不起作用。 请帮忙,谢谢。
这是我的活动:
private ImageView imgSS;
View view;
Bitmap bitmap;
ByteArrayOutputStream bytearrayoutputstream;
File file;
FileOutputStream fileoutputstream;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tes_screenshot);
bytearrayoutputstream = new ByteArrayOutputStream();
//main = getWindow().getDecorView().findViewById(android.R.id.content);
imgSS = (ImageView)findViewById(R.id.imgSS);
Button btnSS = (Button)findViewById(R.id.btnSS);
btnSS.setOnClickListener(new View.OnClickListener(){
public void onClick(View OnclickView){
view = OnclickView.getRootView();
view.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(view.getDrawingCache());
view.buildDrawingCache(true);
view.setDrawingCacheEnabled(false);
imgSS.setImageBitmap(bitmap);
view.setBackgroundColor(Color.parseColor("#999999"));
//Save bitmap
String extr = Environment.getExternalStorageDirectory().toString() + "//";
String fileName = "tes.jpg";
File myPath = new File(extr, fileName);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(myPath);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Screen", "screen");
}catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
答案 0 :(得分:1)
您应用的目标版本是什么?
如果您的应用的目标版本是6或更高,您的应用所需的所有权限都将被禁用,并且在运行时您必须请求权限,一旦用户说允许,那么只有您可以继续操作
在您的代码中,您正在编写并将文件保存在externals文件夹中,因此您需要WRITE_EXTERNAL_STORAGE权限。
请参考此博客以在android中实现运行时权限: https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/
如果您使用的是Xamarin,请参阅: https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/
答案 1 :(得分:0)
适用于Android OS 5(Lolipop)及更早版本。为什么操作系统android 6及以上此代码不起作用
操作系统android 6及以上版本,你需要问run time permission因为从Android 6.0开始(API级别23),用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时授予权限强>
如何询问运行时权限的示例代码
String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
if (ActivityCompat.checkSelfPermission(MainActivity.this, permission)
!= PackageManager.PERMISSION_GRANTED
){
ActivityCompat.requestPermissions(MainActivity.this, new String[]
{permission},123);
}