2014-01-25 2 views
0

Я новичок в программировании, и я пытаюсь сохранить скриншот. У меня есть этот метод, который принимает параметры Bitmap b и String strFileName. Как система назначает имя строки для файла. И что мне нужно поместить в параметры моего вызова savePic(), найденного в onClick().Поиск правильных параметров для сохранения файла

TAKE SCREEN SHOT МЕТОД:

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 ВЫЗОВ МЕТОДОВ

public void onClick(View view) { 

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

      takeScreenShot(MainActivity); 
      savePic(); 

     } 
    }).start(); 

} 
+0

необходимо сохранить изображение в определенном месте на устройстве ?? –

+0

@mohammedmomn Возможно, появятся в загрузках или аналогичных. Как я могу управлять этим и автоматически присваивать имя файла? – johnsonjp34

+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

Смежные вопросы