我已经交给了一个现有的android项目,并且已经使用android进行了多年的开发。通过选项菜单项保存屏幕截图文件android
我必须截图并保存,以便用户可以通过电子邮件或文本消息发送它。
我有截图并相信我知道如何保存它,但我想我错过了一步。我正在测试设备不AVD。
[编辑] 当测试我有设备通过USB连接,我运行应用程序通过Eclipse,我拿我的截图,然后退出应用程序,并打开画廊,我看不到图像文件,离开画廊打开,如果我拔掉USB,图像出现在画廊中。
屏幕截图和保存通过选项菜单项进行。大部分内容是在幕后处理的,一旦完成就会显示吐司说已保存。
正如您在下面看到的,我刚刚从MenuItem中调用了takeScreenshot(),但它就像它在活动完成之前没有完成保存文件。
我可能会错过什么?我需要为这个程序创建另一个类吗?
public class GraphView extends Activity {
....
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.take_screenshot_menu_item)
{
takeScreenshot();
return true;
}
}
private void takeScreenshot() {
Date now = new Date();
android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
try {
// image naming and path to include sd card appending name you choose for file
String imgPath = Environment.getExternalStorageDirectory().toString() + "/Pictures/SMA/";
String filename = now + ".jpg";
// create bitmap screen capture
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
File imagePath = new File(imgPath);
imagePath.mkdirs();
File outputFile = new File(imagePath, filename);
FileOutputStream outputStream = new FileOutputStream(outputFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
showMsg("Screenshot saved to...");
} catch (Throwable e) {
// Several error may come out with file handling or OOM
e.printStackTrace();
}
}
private void showMsg(String msg) {
Toast toast = Toast.makeText(GraphView.this, msg, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, toast.getXOffset()/2, toast.getYOffset()/2);
toast.show();
}
}
尝试使用switch case与onOptionsItemSelected –
我想你是缺少返回语句如下返回super.onOptionsItemSelected(item); –