google 给出一个截屏录屏的方法5.0以上 需要onActivityResult()里的intent参数

https://github.com/android/media-samples/tree/master/ScreenCapture

1、startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(),REQUEST_MEDIA_PROJECTION);

2、在onActivityResult里的
setUpMediaProjection();
setUpVirtualDisplay();

/* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package com.example.android.screencapture;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.hardware.display.DisplayManager;import android.hardware.display.VirtualDisplay;import android.media.projection.MediaProjection;import android.media.projection.MediaProjectionManager;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.DisplayMetrics;import android.view.LayoutInflater;import android.view.Surface;import android.view.SurfaceView;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.Toast;import com.example.android.common.logger.Log;/** * Provides UI for the screen capture. */public class ScreenCaptureFragment extends Fragment implements View.OnClickListener {    private static final String TAG = "ScreenCaptureFragment";    private static final String STATE_RESULT_CODE = "result_code";    private static final String STATE_RESULT_DATA = "result_data";    private static final int REQUEST_MEDIA_PROJECTION = 1;    private int mScreenDensity;    private int mResultCode;    private Intent mResultData;    private Surface mSurface;    private MediaProjection mMediaProjection;    private VirtualDisplay mVirtualDisplay;    private MediaProjectionManager mMediaProjectionManager;    private Button mButtonToggle;    private SurfaceView mSurfaceView;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (savedInstanceState != null) {            mResultCode = savedInstanceState.getInt(STATE_RESULT_CODE);            mResultData = savedInstanceState.getParcelable(STATE_RESULT_DATA);        }    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_screen_capture, container, false);    }    @Override    public void onViewCreated(View view, Bundle savedInstanceState) {        mSurfaceView = (SurfaceView) view.findViewById(R.id.surface);        mSurface = mSurfaceView.getHolder().getSurface();        mButtonToggle = (Button) view.findViewById(R.id.toggle);        mButtonToggle.setOnClickListener(this);    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        Activity activity = getActivity();        DisplayMetrics metrics = new DisplayMetrics();        activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);        mScreenDensity = metrics.densityDpi;        mMediaProjectionManager = (MediaProjectionManager)                activity.getSystemService(Context.MEDIA_PROJECTION_SERVICE);    }    @Override    public void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        if (mResultData != null) {            outState.putInt(STATE_RESULT_CODE, mResultCode);            outState.putParcelable(STATE_RESULT_DATA, mResultData);        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.toggle:                if (mVirtualDisplay == null) {                    startScreenCapture();                } else {                    stopScreenCapture();                }                break;        }    }    @Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        if (requestCode == REQUEST_MEDIA_PROJECTION) {            if (resultCode != Activity.RESULT_OK) {                Log.i(TAG, "User cancelled");                Toast.makeText(getActivity(), R.string.user_cancelled, Toast.LENGTH_SHORT).show();                return;            }            Activity activity = getActivity();            if (activity == null) {                return;            }            Log.i(TAG, "Starting screen capture");            mResultCode = resultCode;            mResultData = data;            setUpMediaProjection();            setUpVirtualDisplay();        }    }    @Override    public void onPause() {        super.onPause();        stopScreenCapture();    }    @Override    public void onDestroy() {        super.onDestroy();        tearDownMediaProjection();    }    private void setUpMediaProjection() {        mMediaProjection = mMediaProjectionManager.getMediaProjection(mResultCode, mResultData);    }    private void tearDownMediaProjection() {        if (mMediaProjection != null) {            mMediaProjection.stop();            mMediaProjection = null;        }    }    private void startScreenCapture() {        Activity activity = getActivity();        if (mSurface == null || activity == null) {            return;        }        if (mMediaProjection != null) {            setUpVirtualDisplay();        } else if (mResultCode != 0 && mResultData != null) {            setUpMediaProjection();            setUpVirtualDisplay();        } else {            Log.i(TAG, "Requesting confirmation");            // This initiates a prompt dialog for the user to confirm screen projection.            startActivityForResult(                    mMediaProjectionManager.createScreenCaptureIntent(),                    REQUEST_MEDIA_PROJECTION);        }    }    private void setUpVirtualDisplay() {        Log.i(TAG, "Setting up a VirtualDisplay: " +                mSurfaceView.getWidth() + "x" + mSurfaceView.getHeight() +                " (" + mScreenDensity + ")");        mVirtualDisplay = mMediaProjection.createVirtualDisplay("ScreenCapture",                mSurfaceView.getWidth(), mSurfaceView.getHeight(), mScreenDensity,                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,                mSurface, null, null);        mButtonToggle.setText(R.string.stop);    }    private void stopScreenCapture() {        if (mVirtualDisplay == null) {            return;        }        mVirtualDisplay.release();        mVirtualDisplay = null;        mButtonToggle.setText(R.string.start);    }}

更多相关文章

  1. android Button控件的四种不同方法
  2. android ksoap2调用.net Webservice 方法总结
  3. PreferenceActivity使用方法
  4. android 图片叠加效果——两种方法
  5. Android 中Activity 之间传递参数
  6. GPS开发常用方法 和用Criteria确定android location providerGPS

随机推荐

  1. android全局dialog
  2. 更新android sdk出现 A folder failed to
  3. cocos2d-x资料收集
  4. Android 下实现带有图标和Checkbox的 Lis
  5. android 多点触摸 实现图片缩放 Image Zo
  6. 初学Android,图形图像之在指定点(坐标)播
  7. android MMI(多媒体)接口--音乐播放器
  8. How to set up a link betwteen a real A
  9. Android 以友好的方式显示时间
  10. Android 实现再按一次后退键退出应用程序