Предложения о том, как сделать снимок экрана в приложении Android с помощью Phonegap? - PullRequest
1 голос
/ 14 ноября 2011

Я спрашиваю предложения о том, как вы будете собирать и сохранять то, что в данный момент отображается в приложении Android, скомпилированном с PhoneGap, нажатием кнопки.

Я часами искал возможные способы сделать это:

  1. Создание плагина Phonegap, который находит текущее представление, преобразует его в растровое изображение, а затем сохраняет его на SD-карту устройства. Как видно здесь .

  2. Использует тег HTML5 Canvas и преобразует этот и любые дочерние элементы в файл PNG, используя метод toDataURL, как показано здесь .

Я на свободе и буду очень признателен за любые предложения, учебные пособия или ссылки на все, что может помочь. Существуют сотни сообщений о том, что это невозможно сделать в Android, но я не могу поверить, что, учитывая, что нашел две ссылки, которые могут быть возможны.

Я пробовал ссылки выше, но есть некоторые нерешенные проблемы, которые мешают мне заставить их работать. Я искал альтернативы.

Редактировать: Ниже приведен код плагина, который я использую, вместе с кодом из первой ссылки о том, как записать скриншот вида.

package com.company.msgbox;

//imports

@Override
public PluginResult execute(String arg0, final JSONArray arg1, String arg2) {
if ( arg0.equals(SHOW) )
{
this.ctx.runOnUiThread(new Runnable()
{
public void run()
{
// try/catch generated by editor
try {
msg = arg1.getString(MSG_INDEX);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

AlertDialog alertDialog = new AlertDialog.Builder(ctx).create();
alertDialog.setTitle("Title");
alertDialog.setMessage(msg);
alertDialog.show();

//screen shot
View content = findViewById(R.id.rootlayout);
Bitmap bitmap = content.getDrawingCache();
File file = new File("/sdcard/test.png");
try 
{
    file.createNewFile();
    FileOutputStream ostream = new FileOutputStream(file);
    bitmap.compress(CompressFormat.PNG, 100, ostream);
    ostream.close();
} 
catch (Exception e) 
{
    e.printStackTrace();
}


}//end of scope
});
}

return new PluginResult(Status.OK);
}

}

Я получаю исключение Null Pointer в этой строке:

View content = findViewById(R.id.rootlayout);

Мой вопрос был бы: создает ли Phonegap представления в Android и, если да, как вы выбираете их с помощью метода findViewById?

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

Этот пост может помочь : http://uihacker.blogspot.com/2011/01/android-phonegap-scale-webview-to-fit.html Этот пост намекает на то, что веб-представление всего приложения может быть получено через атрибут appView вашего объекта Activity.Например в моем коде:

public class SampleActivity extends DroidGap implements OnTouchListener{
   public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
        this.appView.setOnTouchListener((OnTouchListener)this);
   //   this.appView is the biggest view that wrap the whole android application 
   }

  ...implement other methods...
}
1 голос
/ 14 ноября 2011

Какие у вас проблемы с # 1?Это должно работать, в теории.Другим более сложным вариантом будет создание пользовательской ViewGroup, размещение внутри нее веб-представления для телефонного промежутка и переопределение методов рисования для создания изображений, которые можно сохранить.Это концептуально то же самое, что и # 1, но намного больше работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...