2016-03-07 65 views
0

我有Android应用程序与Web服务器交互。当数据从电话发送到服务器时,数据有一些工作(10-20秒),然后我将结果返回给手机。并且我在2个选择中显示对话结果。一种选择是“确定”,这意味着用户对结果没有问题,并关闭对话框。另一种选择是对结果进行截图。当我按下这个按钮时,我没有得到对话框的图片,我得到了这个对话框背后的布局图片。如何在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