آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

گرفتن اسکرین شات در سرویس

Neshat  6 سال پیش  6 سال پیش
0 0

سلام دوستان من دارم یه نرم افزار میسازم که رو صفحه گوشی یه دکمه معلق هست و میخوام کاربر هرجا که میخواد دکمه رو برنه و یه اسکرین شات بگیره

اما نمیدونم که کد های اسکرین شات رو چطور بنویسم لطفا اگر سایتی یا راه حلی چیزی دارید کمک کنید.

0 0
هیچ کس نظری نداره؟ (6 سال پیش)
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Neshat  6 سال پیش
0 0

سلام دوستان من پاسخ این سوال خودمو پیدا کردم و کد هاشو اینجا میزارم تا ازش استفاده کنید و لذت ببرید       

کد های مانیفست :

 <service android:name="FloatingView" />
<activity android:name=".Screen.ScreenCaptureImageActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>







حالا اکتیویتی   ScreenCaptureImageActivity

public class ScreenCaptureImageActivity extends Activity {

private static final String TAG = ScreenCaptureImageActivity.class.getName();
private static final int REQUEST_CODE = 100;
private static MediaProjection MEDIA_PROJECTION;
private static String STORE_DIRECTORY;
private static int IMAGES_PRODUCED;
private static boolean isCaptured = false;
private final DateFormat fileFormat =
new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss'.PNG'", Locale.US);
private MediaProjectionManager mProjectionManager;
private ImageReader mImageReader;
private Handler mHandler;
private int mWidth;
private int mHeight;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// call for the projection manager
mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
startProjection();

// start capture handling thread
new Thread() {
@Override
public void run() {
Looper.prepare();
mHandler = new Handler();
Looper.loop();
}
}.start();

}


@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void startProjection() {
startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);

}

private void stopProjection() {
mHandler.post(new Runnable() {
@Override
public void run() {
//processing = false;
if (MEDIA_PROJECTION != null) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
MEDIA_PROJECTION.stop();
}
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode == RESULT_OK) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
MEDIA_PROJECTION = mProjectionManager.getMediaProjection(resultCode, data);
}
if (MEDIA_PROJECTION != null) {
STORE_DIRECTORY = Environment.getExternalStorageDirectory().getAbsolutePath() + "/GPscreenshots/";
File storeDirectory = new File(STORE_DIRECTORY);
if (!storeDirectory.exists()) {
boolean success = storeDirectory.mkdirs();
if (!success) {
Log.e(TAG, "failed to create file storage directory.");
return;
}
}

DisplayMetrics metrics = getResources().getDisplayMetrics();
int density = metrics.densityDpi;
int flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
mWidth = size.x;
mHeight = size.y;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 2);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
MEDIA_PROJECTION.createVirtualDisplay("screencap", mWidth, mHeight, density, flags, mImageReader.getSurface(), null, mHandler);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
mImageReader.setOnImageAvailableListener(new ImageAvailableListener(), mHandler);
}
}
} else {
Log.e("finish", "finish");
finish();
try {
windowManager.addView(view, FloatingView.params);
} catch (IllegalArgumentException | NullPointerException e) {
Log.e("error", e.toString());
}
}
}
}

@Override
protected void onDestroy() {
//startService(new Intent(getApplicationContext(), FloatingView.class));
super.onDestroy();
}


//static boolean processing = false;

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
private class ImageAvailableListener implements ImageReader.OnImageAvailableListener {
@Override
public void onImageAvailable(ImageReader reader) {

Image image = null;
FileOutputStream fos = null;
Bitmap bitmap = null;
//isCaptured = true;
try
{
if (isCaptured)
{
Toast.makeText(getApplicationContext(), getString(R.string.screenshot_saved), Toast.LENGTH_LONG).show();
stopProjection();
finish();
if (view != null) {
windowManager.addView(view, FloatingView.params);
}
//startActivity(new Intent(getApplicationContext(), FloatingView.class));



}


MediaPlayer mPlayer = MediaPlayer.create(ScreenCaptureImageActivity.this, R.raw.camera_sound);
mPlayer.start();
finish();
image = mImageReader.acquireLatestImage();
if (image != null) {
isCaptured = true;
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * mWidth;
// create bitmap
bitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
// write bitmap to a file
String outputName = fileFormat.format(new Date());
fos = new FileOutputStream(STORE_DIRECTORY + outputName);
bitmap.compress(CompressFormat.PNG, 100, fos);
updateMedia(STORE_DIRECTORY + outputName);
// MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, outputName , null);
mPlayer.stop();
IMAGES_PRODUCED++;
Log.e(TAG, "captured image: " + IMAGES_PRODUCED);
}

} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

if (bitmap != null) {
bitmap.recycle();
}

if (image != null) {
image.close();
}
}
// startService(new Intent(getApplicationContext(), FloatingView.class));

}
}

private void updateMedia(final String s) {
Log.i("update image to gallery", "updateMedia: " + s);
final Context applicationContext = this.getApplicationContext();
MediaScannerConnection.scanFile(applicationContext, new String[]{s}, (String[]) null, (MediaScannerConnection.OnScanCompletedListener) null);
}


}







  1. کد های FloatingView
 
Intent captureIntent = new Intent(getBaseContext(), ScreenCaptureImageActivity.class);
captureIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(captureIntent);
checkTakeScreenshot=true;

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .