2016-03-07 2 views
0

У меня есть приложение для Android, которое взаимодействует с веб-сервером. Когда данные отправляются с телефона на сервер, есть небольшая работа с данными (10-20 секунд), после чего я возвращаю результат на телефон. И я показываю этот результат в диалоговом окне с двумя вариантами. Один из вариантов - «ОК», и это означает, что пользователь в порядке с результатом и отклоняет диалог. Другой выбор делает скриншот этих результатов. И когда я нажимаю эту кнопку, я не получаю изображение диалога, я получаю изображение макета, которое находится за этим диалогом.Как сделать скриншот диалога в программном обеспечении Android?

enter image description here

Мой код за это

//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); 
    } 
} 

Мой результат изображения только на экране без диалога. Как получить изображение диалога в нем?

+0

Этот код не будет работать, потому что диалог не является частью корневого представления вашей активности. Это отдельное окно. –

+0

, чей скриншот вы хотите? диалог или экран за диалогом –

+0

Только диалог или оба – KuKeC

ответ

-1

попробовать этот код

String picId=String.valueOf(nu); 
        String myfile="meter"+picId+".jpeg"; 

        BitmapDrawable bitmapDrawable = null; 
        Toast.makeText(getActivity(),"success full store image gallery",Toast.LENGTH_SHORT).show(); 
        Date now = new Date(); 
        android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now); 

        try { 

         File dir_image = new File(Environment.getExternalStorageDirectory()+//<--- 
           File.separator+"SoundMeter"); //23-1-16   //<--- 
         dir_image.mkdirs(); 

         // image naming and path to include sd card appending name you choose for file 
         // String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg"; 

         // create bitmap screen capture 

         View v1 = surfaceView.getRootView(); 
         v1.setDrawingCacheEnabled(true); 
         Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 

         /* bitmapDrawable = new BitmapDrawable(bitmap);*/ 
         v1.setDrawingCacheEnabled(false); 
         // File imageFile = new File(mPath);  //file path 23-1-16 
         File imageFile = new File(dir_image,myfile); 

         FileOutputStream outputStream = new FileOutputStream(imageFile); 
         int quality = 100; 
         bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream); 
         outputStream.flush(); 
         outputStream.close(); 

         openScreenshot(imageFile); 
        } catch (Throwable e) { 
         // Several error may come out with file handling or OOM 
         e.printStackTrace(); 
        } 
        btnCaptured1.setVisibility(View.VISIBLE); 
        btnCaptured.setVisibility(View.VISIBLE); 
        //btnCaptured.setBackgroundDrawable(bitmapDrawable); 

       } 
      }); 

     } 
     else 
     { 
      Toast.makeText(getActivity().getApplicationContext(), "No Connection", Toast.LENGTH_LONG).show(); 

     } 
+0

Возможно, объяснение фрагмента кода поможет скорее, чем просто вставить его :) – Zohair

0

TRY получения Windows's decor view

затем получить свой кэш рисунок растровое изображение, как вы реализуете.

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