Как Native Extension сделать снимок экрана на устройстве Android?
У меня есть приложение Adobe Air, которое намеревается сделать снимок экрана с помощью Native Extension на устройстве Android, но код Java возвращает черное изображение.
public FREObject call(FREContext context, FREObject[] params) {
View view = context.getActivity().getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap image = view.getDrawingCache();
}
Я не знаю много о Adobe Air. Мой java-код работает точно в Java-приложении Android, но возвращает черное изображение в Android-приложении Adobe Air с собственным расширением.
Есть ли какое-либо решение или какой-либо способ сделать снимок экрана, используя Java в NativeExtension?
Большое спасибо!
2 ответа
Может быть, вы не получаете правильное представление. Попробуйте это, чтобы получить самый верхний корневой вид.
public FREObject call(FREContext context, FREObject[] params)
{
View view = findViewById(android.R.id.content).getRootView();
view.setDrawingCacheEnabled(true);
Bitmap image = view.getDrawingCache();
if(image == null)
{
System.out.println("Image returned was null!");
}
}
Я также удалил строку buildDrawingCache(); это может иногда вызывать проблемы, и из того, что я прочитал, это не совсем необходимо.
Наконец, вы захотите проверить, является ли возвращаемое растровое изображение пустым. Если так, то это может быть причиной того, почему все черное.
Вы можете сделать такой снимок экрана и сохранить его на SD-карту:
View content = findViewById(R.id.layoutroot);
content.setDrawingCacheEnabled(true);
Function to get the rendered view:
private void getScreen()
{
View content = findViewById(R.id.layoutroot);
Bitmap bitmap = content.getDrawingCache();
File file = new File( Environment.getExternalStorageDirectory() + "/asdf.png");
try
{
file.createNewFile();
FileOutputStream ostream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, ostream);
ostream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Вы должны добавить это разрешение в ваш AndroidManifest (если вы хотите сохранить его):
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />