查找文件保存的正确参数

时间:2014-01-25 23:14:49

标签: java android parameters

我是编程的新手,我正在尝试保存屏幕截图。我有这个方法,它采用参数Bitmap b和String strFileName。系统如何为文件分配字符串名称。我需要在onClick()中找到的savePic()调用的参数中放置什么。

采取屏幕拍摄方法:

public static Bitmap takeScreenShot(Activity activity)
{
    View view = activity.getWindow().getDecorView();
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    Bitmap b1 = view.getDrawingCache();
    Rect frame = new Rect();
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
    int statusBarHeight = frame.top;
    int width = activity.getWindowManager().getDefaultDisplay().getWidth();
    int height = activity.getWindowManager().getDefaultDisplay().getHeight();

    Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height  - statusBarHeight);
    view.destroyDrawingCache();
    return b;
}

保存PIC方法:

public static void savePic(Bitmap b, String strFileName)
{
    FileOutputStream fos = null;
    try
    {
        fos = new FileOutputStream(strFileName);
        if (null != fos)
        {
            b.compress(Bitmap.CompressFormat.PNG, 90, fos);
            fos.flush();
            fos.close();
        }
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
}

方法的onClick CALL

public void onClick(View view) {

    new Thread(new Runnable() {
        public void run() {
            // Call your methods

            takeScreenShot(MainActivity);
            savePic();

        }
    }).start();

}

1 个答案:

答案 0 :(得分:2)

您需要存储takeScreenShot()方法返回的位图的引用。然后将该位图引用传递给savePic()以及文件名。一个简单的解决方案是:

Bitmap screenShot = takeScreenShot(MainActivity);
String filename = "my_screenshot.png";
savePic(screenShot, filename);

请注意,您必须提供文件名。上述问题是您保存的每个屏幕截图都会覆盖前一个屏幕截图。生成唯一文件名的常用方法是在文件名后附加时间戳。例如:

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_hhmmss");
String formattedDate = sdf.format(date);
String filename = "my_screenshot_" + formattedDate + ".png";

在savePic()方法中,您没有指定保存文件的位置。默认情况下,它应保存到内部存储文件'您的应用程序的文件夹,但您应该明确说明保存它的位置。例如,这将确保它保存到该位置:

File f = new File(getFilesDir(), strFileName);
fos = new FileOutputStream(f);

如果您想要保存到公共下载文件夹,请执行以下操作:

File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), strFileName);

以下链接提供了有关可以将文件和数据保存到的各个位置的详细信息: http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/reference/android/os/Environment.html