[英]Saving a screenshot file via options menu item 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();
}
}
如下更改您的onOptionsItemSelected()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.take_screenshot_menu_item:
takeScreenshot();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
不確定是否有幫助,但確實有幫助。 由於保存后圖像文件沒有立即顯示在圖庫中,因此我添加了以下內容:
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://"+ Environment.getExternalStorageDirectory())
));
這一定以某種形式或方式刷新了圖庫,現在我可以立即看到圖像文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.