У меня есть приложение для Android, которое взаимодействует с веб-сервером. Когда данные отправляются с телефона на сервер, есть небольшая работа с данными (10-20 секунд), после чего я возвращаю результат на телефон. И я показываю этот результат в диалоговом окне с двумя вариантами. Один из вариантов - «ОК», и это означает, что пользователь в порядке с результатом и отклоняет диалог. Другой выбор делает скриншот этих результатов. И когда я нажимаю эту кнопку, я не получаю изображение диалога, я получаю изображение макета, которое находится за этим диалогом.Как сделать скриншот диалога в программном обеспечении Android?
Мой код за это
//this method is called on onPostExecute of async task
public void recieveResult (final Activity act,String result){
new AlertDialog.Builder(act)
.setTitle("Data - status")
.setMessage(result)
.setNegativeButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("Save picture", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Bitmap bitmap = takeScreenshot(act);
saveBitmap(bitmap,act);
Toast.makeText(act,"Saved",Toast.LENGTH_LONG).show();
dialog.dismiss();
}
})
.show();
}
public Bitmap takeScreenshot(Activity act) {
View rootView = act.findViewById(android.R.id.content).getRootView();
rootView.setDrawingCacheEnabled(true);
return rootView.getDrawingCache();
}
public void saveBitmap(Bitmap bitmap,Activity act) {
String timeStamp = new SimpleDateFormat("MMyyyydd_HHmmss").format(new Date());
String imageFileName = "/screenshot_"+timeStamp+"_.png";
File storage = Environment.getExternalStoragePublicDirectory("Screens");
if (!storage.exists())
{
Toast.makeText(act, "Directory made", Toast.LENGTH_LONG).show();
storage.mkdirs();
}
File imagePath = new File(storage.getPath() + imageFileName);
FileOutputStream fos;
try {
fos = new FileOutputStream(imagePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e("GREC", e.getMessage(), e);
} catch (IOException e) {
Log.e("GREC", e.getMessage(), e);
}
}
Мой результат изображения только на экране без диалога. Как получить изображение диалога в нем?
Этот код не будет работать, потому что диалог не является частью корневого представления вашей активности. Это отдельное окно. –
, чей скриншот вы хотите? диалог или экран за диалогом –
Только диалог или оба – KuKeC