public class ScreenCap { static { System.loadLibrary("scrcap"); } static native void captureScreenToFile(String fileName);}
广播接收器:
public class ScreenCapReceiver extends BroadcastReceiver { private static final String LOG_TAG = "ScreenCapReceiver"; @Override public void onReceive(Context context, Intent intent) { // Temp code, should not in main thread Log.d(LOG_TAG, "generate file name"); //Checking external storage boolean mExternalStorageWriteable = false; String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { mExternalStorageWriteable = true; } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { mExternalStorageWriteable = false; } else { mExternalStorageWriteable = false; } if (!mExternalStorageWriteable) return; File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "SCRCAP_"+System.currentTimeMillis()+".png"); Log.d(LOG_TAG, "Capture screen to : " + file.getAbsolutePath()); ScreenCap.captureScreenToFile(file.getAbsolutePath()); Log.d(LOG_TAG, "screen captured"); }}
ScreenCap.cpp:
#include下载源码:#include #include #include #include #include #include #include #include "com_cust_android_screencap_ScreenCap.h"using namespace android;/* * Class: com_cust_android_screencap_ScreenCap * Method: captureScreenToFile * Signature: (Ljava/lang/String;)V */JNIEXPORT void JNICALL Java_com_cust_android_screencap_ScreenCap_captureScreenToFile (JNIEnv *env, jclass clazz, jstring fileName) { const String16 name("SurfaceFlinger"); sp composer; getService(name, &composer); sp heap; uint32_t w, h; PixelFormat f; status_t err = composer->captureScreen(0, &heap, &w, &h, &f, 0, 0); if (err != NO_ERROR) { fprintf(stderr, "screen capture failed: %s\n", strerror(-err)); return; } LOGD("screen capture success: w=%u, h=%u, pixels=%p\n", w, h, heap->getBase()); SkBitmap b; b.setConfig(SkBitmap::kARGB_8888_Config, w, h); b.setPixels(heap->getBase()); SkImageEncoder::EncodeFile(env->GetStringUTFChars(fileName, 0), b, SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality);}JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { return JNI_VERSION_1_6;}JNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved) {}