簡體   English   中英

通過選項菜單項android保存屏幕截圖文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM