2010-08-27 43 views

Trả lời

17

Something như thế có thể làm việc cho bạn:

View v = view.getRootView(); 
v.setDrawingCacheEnabled(true); 
Bitmap b = v.getDrawingCache(); 
+2

Cảm ơn, đây chỉ là những gì tôi cần!Tôi đã có một vấn đề tương tự nhưng tôi chỉ muốn một Bitmap của ứng dụng của tôi, không phải là giao diện người dùng hệ điều hành vv –

12

Có một cuộc thảo luận dài này trên android-developers, nhưng câu trả lời ngắn gọn là: Bạn có thể không programatically chụp màn hình của màn hình một thiết bị Android của tại khoảnh khắc, trừ khi

  1. Bạn có quyền root trên điện thoại đó, hoặc
  2. ứng dụng của bạn là một ứng dụng hệ thống

Giấy phép kê khai Android READ_FRAME_BUFFER tồn tại (xem tài liệu api here), nhưng hiện tại chỉ có thể được sử dụng bởi các ứng dụng hệ thống. Có nhiều lý do cho điều này, một là vì nó là một nguy cơ bảo mật. Nếu một nền có thể chụp ảnh màn hình của màn hình điện thoại bất cứ lúc nào, thì mọi người có thể sử dụng các kỹ thuật OCR để đánh cắp mật khẩu của người dùng khi chúng được nhập vào, trong số các thông tin cá nhân khác.

Vì vậy, không, ứng dụng VNC không thể thực hiện tại thời điểm này mà không có gốc. Để chụp ảnh màn hình từ máy tính của bạn (trong khi điện thoại được cắm qua usb), bạn có thể sử dụng DDMS.

+0

Dựa trên những gì bạn đã nói ở đây, có vẻ như một ứng dụng hệ thống có thể được cài đặt thông qua phục hồi không có chứng khoán và không nhất thiết cần đến ROM chính nó được bắt nguồn từ. Tôi chưa từng nghe về bất kỳ ứng dụng hệ thống VNC nào, thậm chí là 1,75 năm sau khi bạn đăng câu trả lời này. Có rất nhiều người dùng ROM tùy chỉnh trên mạng và có vẻ như có một khoảng trống ở đó đang chờ ai đó đến cùng với một ứng dụng VNC tốt. –

+2

Về điểm 2: bạn không chỉ đơn thuần là một ứng dụng hệ thống (tức là trong thư mục hệ thống), bạn phải được ký bằng phím OS, điều này còn hạn chế hơn nhiều. Đây là sự khác biệt giữa sự cho phép là "signatureOrSystem" và "signature". –

7

Bạn có thể thử thư viện sau: http://code.google.com/p/android-screenshot-library/ Ảnh chụp màn hình Android Thư viện (ASL) cho phép chụp ảnh màn hình theo chương trình từ thiết bị Android mà không yêu cầu quyền truy cập root. Thay vào đó, ASL sử dụng một dịch vụ gốc chạy trong nền, bắt đầu thông qua Cầu gỡ lỗi Android (ADB) một lần cho mỗi lần khởi động thiết bị.

+0

Câu trả lời của bạn rất hữu ích cho tôi nhưng khi tôi sử dụng thư viện này, nó tiếp tục hiển thị cho tôi một bánh mì nướng nói "Không tìm thấy dịch vụ gốc". Bạn đã gặp phải một vấn đề như vậy nếu vậy hãy giúp tôi. Cảm ơn –

+2

"Không tìm thấy dịch vụ gốc" cho tôi .... tôi thiếu gì ở đây? –

3

Tôi nghĩ rằng có thể trong kitkat bằng cách sử dụng lệnh adb để chụp màn hình. Bạn có thể sử dụng lệnh này để màn hình ghi lại như một đoạn video

adb shell screenrecord /sdcard/demo.mp4 

Bạn có thể tìm thêm chi tiết here

bạn có thể thực hiện lệnh adb từ ứng dụng của bạn. Kiểm tra câu trả lời here

+1

Không. Sau khi thực thi: 'screenrecord --verbose --time-limit 5 /sdcard/recvid.mp4' trên phương thức getRuntime(). Exec() ... Quá trình này chạy, tuy nhiên tôi nhận được lỗi: "Permission Denial: broadcast yêu cầu chạy như người dùng -1 nhưng đang gọi từ người dùng 0; điều này yêu cầu android.permission.INTERACt_ACROSS_USERS_FULL .. "Tuy nhiên tôi đã có thể chạy 'screenrecord --help' tốt! – giannileuani

1

đặt nó trong onClick ..

Bitmap bitmap = takeScreenshot(); 
saveBitmap(bitmap); 

và viết funtcion ..

public Bitmap takeScreenshot() { 
    View rootView = findViewById(android.R.id.content).getRootView(); 
    rootView.setDrawingCacheEnabled(true); 
    return rootView.getDrawingCache(); 
} 

public void saveBitmap(Bitmap bitmap) { 
    File imagePath = new File(Environment.getExternalStorageDirectory() + "/screenshot.png"); 
    FileOutputStream fos; 
    try { 
     fos = new FileOutputStream(imagePath); 
     bitmap.compress(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); 
    } 
} 
Các vấn đề liên quan