Giter Club home page Giter Club logo

instacapture's Introduction

Instacapture 2.0 Release

Android library to capture screenshot from your app

Features

  • Capture all the contents of the screen, includes:

  • Set a specific view(s) to prevent it from capturing.

  • No permissions are required.

Installation

Add this to your module build.gradle file:

dependencies {
	...
	 compile "com.github.tarek360:instacapture:2.0.1"
}

Add this to your root build.gradle file (not your module build.gradle file) :

allprojects {
	repositories {
		...
		maven { url "https://jitpack.io" }
	}
}

How to use Instacapture ?

Kotlin

Instacapture.capture(this, object : SimpleScreenCapturingListener() {
    override fun onCaptureComplete(bitmap: Bitmap) {
       //Your code here..

    }
})

// or in Rx way
Instacapture.captureRx(this).subscribe { bitmap ->
   //Your code here..
}

Java

Instacapture.INSTANCE.capture(activity, new SimpleScreenCapturingListener() {
    @Override
    public void onCaptureComplete(Bitmap bitmap) {
       //Your code here..
    }
}, ignoredViews);

// or in Rx way
Instacapture.INSTANCE.captureRx(this, ignoredViews).subscribe(new Action1<Bitmap>() {
    @Override
    public void call(Bitmap bitmap) {
        //Your code here..
     }
});

How to ignore view(s) from the screenshot?

Kotlin

Instacapture.capture(.., .., ignoredViews)
//or
Instacapture.captureRx(.., ignoredViews)

Java

Instacapture.INSTANCE.capture(.., .., ignoredViews);
//or
Instacapture.INSTANCE.captureRx(.., ignoredViews);
  • To enable Instacapture logging.

Kotlin

Instacapture.enableLogging(true);

Java

Instacapture.INSTANCE.enableLogging(true);

License

Copyright 2017 Tarek360

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.

instacapture's People

Contributors

danrong avatar paulwoitaschek avatar tarek360 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

instacapture's Issues

Crash on OPPO R9 all time

Stack trace:  
io.reactivex.exceptions.OnErrorNotImplementedException: java.lang.NoSuchFieldException: No field mView in class Landroid/view/ColorViewRootImpl; (declaration of 'android.view.ColorViewRootImpl' appears in /system/framework/framework.jar:classes2.dex)
	at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
	at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
	at io.reactivex.internal.subscribers.LambdaSubscriber.onError(LambdaSubscriber.java:76)
	at io.reactivex.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onError(FlowableDoOnEach.java:111)
	at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:207)
	at io.reactivex.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:392)
	at io.reactivex.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
	at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
	at android.os.Handler.handleCallback(Handler.java:739)
	at android.os.Handler.dispatchMessage(Handler.java:95)
	at android.os.Looper.loop(Looper.java:179)
	at android.app.ActivityThread.main(ActivityThread.java:5739)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
Caused by: com.tarek360.instacapture.exception.ScreenCapturingFailedException: java.lang.NoSuchFieldException: No field mView in class Landroid/view/ColorViewRootImpl; (declaration of 'android.view.ColorViewRootImpl' appears in /system/framework/framework.jar:classes2.dex)
	at com.tarek360.instacapture.screenshot.FieldHelper.getFieldValue(FieldHelper.java:68)
	at com.tarek360.instacapture.screenshot.FieldHelper.getRootViews(FieldHelper.java:52)
	at com.tarek360.instacapture.screenshot.ScreenshotTaker.getScreenshotBitmap(ScreenshotTaker.java:49)
	at com.tarek360.instacapture.screenshot.ViewsBitmapObservable$2.call(ViewsBitmapObservable.java:42)
	at com.tarek360.instacapture.screenshot.ViewsBitmapObservable$2.call(ViewsBitmapObservable.java:39)
	at io.reactivex.internal.operators.flowable.FlowableFromCallable.call(FlowableFromCallable.java:49)
	at io.reactivex.internal.operators.flowable.FlowableScalarXMap.tryScalarXMapSubscribe(FlowableScalarXMap.java:54)
	at io.reactivex.internal.operators.flowable.FlowableFlatMap.subscribeActual(FlowableFlatMap.java:50)
	at io.reactivex.Flowable.subscribe(Flowable.java:12978)
	at io.reactivex.Flowable.subscribe(Flowable.java:12924)
	at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
	... 8 more
Caused by: java.lang.NoSuchFieldException: No field mView in class Landroid/view/ColorViewRootImpl; (declaration of 'android.view.ColorViewRootImpl' appears in /system/framework/framework.jar:classes2.dex)
	at java.lang.Class.getDeclaredField(Native Method)
	at com.tarek360.instacapture.screenshot.FieldHelper.getFieldValue(FieldHelper.java:64)

activity_dialog_and_Menu_sample.xml

activity_dialog_and_Menu_sample.xml: Error: 'M' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore

run in service

can tgis library run in service?
something like have notification and capture from there?

Query - Can InstaCapture capture Android Camera Feed

I have an App that uses both a GLSurfaceView overlaid over a SurfaceView that contains the feed from the Android devices camera

If I use the Android built in Screen Capture - I get a screenshot with the UI (from my GLSurfaceView) and the Camera Feed (see attached file)

I I use InstaCapture I get a screenshot with the UI (from my GLSurfaceView) BUT NO camera feed (only a black background - see attached file)

I also attached an image of the Activity layout showing it has two child views (GLSurfaceView20 and CameraSurface)

screenshot-21-12-2016_16-45-47 456
capture
screenshot_2016-12-21-16-57-50

Setting android:allowBackup="false" on AndroidManifest.xml shows below error.

Error:Execution failed for task ':app:processDebugManifest'.

Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:25:9-36
is also present at [com.github.tarek360:instacapture:2.0.0-kotlin-beta1] AndroidManifest.xml:12:9-35 value=(true).
Suggestion: add 'tools:replace="android:allowBackup"' to element at AndroidManifest.xml:23:5-229:19 to override.

Support Map fragment turns white when capture a screenshot again

I have an activity with support map fragment inside. Map is loading OK, call
InstaCapture.getInstance(MapBaseActivity.this).capture(fileScreenShot, ignoredView, btnShareOverlay, btnShare).setScreenCapturingListener(new ScreenCaptureListener() {

            @Override
            public void onCaptureStarted() {
                //TODO..
                Log.d(TAG, "Capture started");
            }

            @Override
            public void onCaptureFailed(Throwable e) {
                //TODO..
                Log.d(TAG, "Capture failed");
            }

            @Override
            public void onCaptureComplete(File file) {
                //TODO..
                mScreenshotFile = file;
            }
        });

Everything is just fine at the first time, the screenshot contains the map and other views.
But, when i want to capture the screen again, right after the first time by calling that above method, the map was white, all other views were ok. And other tries after the 1st time were failed like that.

Any idea about this issue? Please help me to solve it.
Thanks.

Doesn't capture video in WebView

Hi. I was curious if this library could capture an image of a video in a WebView, so I added a "Web View Sample" button to my local copy of the project. This just opens a WebView displaying the YouTube page.

Before I pressed the "Capture" button I just clicked on a movie to start it playing. The screenshot contains the YouTube page, and the video playing controls. But where the video would be it is just black. I also tried another site with videos ("http://www.quirksmode.org/html5/tests/video.html") but with the same results.

Do you think there is a way to capture the video image? If you have any ideas please let me know.

The sample code is below.

package com.tarek360.sample;

import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import butterknife.BindView;
import butterknife.OnClick;

public class WebViewSampleActivity extends BaseSampleActivity {

  @BindView(R.id.toolbar) Toolbar toolbar;

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view_sample);

    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    WebView webView = (WebView) findViewById(R.id.webView);
    if (webView != null)
    {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

        //webView.loadUrl("http://www.quirksmode.org/html5/tests/video.html");
        webView.loadUrl("https://www.youtube.com/");
    }
  }

Screen not capture in Android 10 due to java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps

I run the screen capture and it always, and I noticed onError trigger:

  `captureRx(activity, *ignoredViews).subscribe(object : Subscriber<Bitmap>() {
        override fun onCompleted() {}

        override fun onError(e: Throwable) {
            Logger.e(ERROR_SCREENSHOT_CAPTURE_FAILED)
            Logger.printStackTrace(e)
            screenCaptureListener.onCaptureFailed(e)
        }

        override fun onNext(bitmap: Bitmap) {
            screenCaptureListener.onCaptureComplete(bitmap)
        }
    })`

Error message: java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps

I run on Android 10.

how to capture a view ?

i found your lib support to capture the Acitivity Window , sometime i just want to capture a view or
a part of layout ,how can i do it ?

InstaCapture crash after enable Proguard

03-02 17:50:15.383 17461-17461/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.InternalError
at g.d.d.b.y.a(Unknown Source)
at g.d.d.b.h.(Unknown Source)
at g.d.d.a.a(Unknown Source)
at g.d.d.a.(Unknown Source)
at g.d.d.a.(Unknown Source)
at g.d.d.c$1.(Unknown Source)
at g.d.d.c.(Unknown Source)
at g.b.a(Unknown Source)
at com.tarek360.instacapture.InstaCapture.b(Unknown Source)
at com.tarek360.instacapture.InstaCapture.a(Unknown Source)
at com.tarek360.instacapture.InstaCapture.a(Unknown Source)
at place.where.common.view.fragment.IndoorMapFragment.onIndoorShareCLick(Unknown Source)
at place.where.common.view.fragment.IndoorMapFragment$$ViewBinder$4.doClick(Unknown Source)
at butterknife.internal.DebouncingOnClickListener.onClick(Unknown Source)
at android.view.View.performClick(View.java:4757)
at android.view.View$PerformClick.run(View.java:19766)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5255)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
Caused by: java.lang.NoSuchFieldException: producerIndex
at java.lang.Class.getDeclaredField(Class.java:886)
at g.d.d.b.y.a(Unknown Source) 
at g.d.d.b.h.(Unknown Source) 
at g.d.d.a.a(Unknown Source) 
at g.d.d.a.(Unknown Source) 
at g.d.d.a.(Unknown Source) 
at g.d.d.c$1.(Unknown Source) 
at g.d.d.c.(Unknown Source) 
at g.b.a(Unknown Source) 
at com.tarek360.instacapture.InstaCapture.b(Unknown Source) 
at com.tarek360.instacapture.InstaCapture.a(Unknown Source) 
at com.tarek360.instacapture.InstaCapture.a(Unknown Source) 
at place.where.common.view.fragment.IndoorMapFragment.onIndoorShareCLick(Unknown Source) 
at place.where.common.view.fragment.IndoorMapFragment$$ViewBinder$4.doClick(Unknown Source) 
at butterknife.internal.DebouncingOnClickListener.onClick(Unknown Source) 
at android.view.View.performClick(View.java:4757) 
at android.view.View$PerformClick.run(View.java:19766) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5255) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 

How can i capture screenshot of Specific layout/view ?

Hi,
i just want to capture the screenshot of specific RelativeLayout containing the GLSurfaceview and in other Activity it contains the GPUimage. but i haven't found any way because when it always capture the screenshot of full screen. Please guide me how can i fix my issue, Thanks

ReactNative / Android Studio

Trying to use this in a react-native project. I am trying to add the package using the jitpack instructions provided but keep getting a

error: package com.tarek360.instacapture does not exist

Did you try on jellybean? 4.1.1

Hi. I'm testing InstaCapture on several versions of android. I tested on sdk version 16, 17, 18, 24. Only on 16 an InstaCapture is failed. See the below logs. This is so strange. I checked several files on AOSP. Because the log said NoSuchFieldException for mWindowManager. But your code is correct and fit on AOSP code. Can you check this log? Thanks.

12-20 15:06:02.988: E/InstaCapture(3330): Screenshot capture failed
12-20 15:06:02.988: E/InstaCapture(3330): Logging caught exception
12-20 15:06:02.988: E/InstaCapture(3330): com.tarek360.instacapture.exception.ScreenCapturingFailedException: java.lang.NoSuchFieldException: mWindowManager
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.FieldHelper.getFieldValue(FieldHelper.java:67)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.FieldHelper.getRootViews(FieldHelper.java:33)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.ScreenshotTaker.getScreenshotBitmap(ScreenshotTaker.java:49)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.ViewsBitmapObservable$1.call(ViewsBitmapObservable.java:27)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.ViewsBitmapObservable$1.call(ViewsBitmapObservable.java:24)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.Observable.subscribe(Observable.java:10246)
12-20 15:06:02.988: E/InstaCapture(3330): at rx.Observable.subscribe(Observable.java:10213)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.InstaCapture.capture(InstaCapture.java:96)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.sample.BaseSampleActivity.captureScreenshot(BaseSampleActivity.java:47)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.sample.CustomViewSampleActivity.onClickFAB(CustomViewSampleActivity.java:29)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.sample.CustomViewSampleActivity_ViewBinding$1.doClick(CustomViewSampleActivity_ViewBinding.java:33)
12-20 15:06:02.988: E/InstaCapture(3330): at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
12-20 15:06:02.988: E/InstaCapture(3330): at android.view.View.performClick(View.java:4084)
12-20 15:06:02.988: E/InstaCapture(3330): at android.view.View$PerformClick.run(View.java:16966)
12-20 15:06:02.988: E/InstaCapture(3330): at android.os.Handler.handleCallback(Handler.java:615)
12-20 15:06:02.988: E/InstaCapture(3330): at android.os.Handler.dispatchMessage(Handler.java:92)
12-20 15:06:02.988: E/InstaCapture(3330): at android.os.Looper.loop(Looper.java:137)
12-20 15:06:02.988: E/InstaCapture(3330): at android.app.ActivityThread.main(ActivityThread.java:4745)
12-20 15:06:02.988: E/InstaCapture(3330): at java.lang.reflect.Method.invokeNative(Native Method)
12-20 15:06:02.988: E/InstaCapture(3330): at java.lang.reflect.Method.invoke(Method.java:511)
12-20 15:06:02.988: E/InstaCapture(3330): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-20 15:06:02.988: E/InstaCapture(3330): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-20 15:06:02.988: E/InstaCapture(3330): at dalvik.system.NativeStart.main(Native Method)
12-20 15:06:02.988: E/InstaCapture(3330): Caused by: java.lang.NoSuchFieldException: sWindowManager
12-20 15:06:02.988: E/InstaCapture(3330): at java.lang.Class.getDeclaredField(Class.java:631)
12-20 15:06:02.988: E/InstaCapture(3330): at com.tarek360.instacapture.screenshot.FieldHelper.getFieldValue(FieldHelper.java:63)
12-20 15:06:02.988: E/InstaCapture(3330): ... 26 more

Rxjava2 conflict

Could you please change Rx library to Rxjava2?
My app's other library dependence conflict to you Rx1

NoClassDefFoundError

my code :
Instacapture.capture(this, object : SimpleScreenCapturingListener() {
override fun onCaptureComplete(bitmap: Bitmap) {
shere(bitmap)
}
})
}

error:

06-20 11:52:01.472 32477-32477/com.jisu.sports E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.jisu.sports, PID: 32477
java.lang.NoClassDefFoundError: Failed resolution of: Lrx/functions/Func0;
at com.tarek360.instacapture.screenshot.ScreenshotProvider.getScreenshotBitmap(ScreenshotProvider.kt:15)
at com.tarek360.instacapture.Instacapture.captureRx(Instacapture.kt:58)
at com.tarek360.instacapture.Instacapture.capture(Instacapture.kt:31)
at com.jisu.sports.ui.matche.view.MatchDetailsActivity$initClick$1.onClick(MatchDetailsActivity.kt:121)
at android.view.View.performClick(View.java:6266)
at android.view.View$PerformClick.run(View.java:24730)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:6684)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.ClassNotFoundException: Didn't find class "rx.functions.Func0" on path: DexPathList[[zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/base.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_dependencies_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_resources_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_0_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_1_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_2_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_3_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_4_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_5_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_6_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_7_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_8_apk.apk", zip file "/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/lib/arm, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/base.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_dependencies_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_resources_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_0_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_1_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_2_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_3_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_4_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_5_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_6_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_7_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_8_apk.apk!/lib/armeabi, /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_slice_9_apk.apk!/lib/armeabi, /system/lib, /system/vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.tarek360.instacapture.screenshot.ScreenshotProvider.getScreenshotBitmap(ScreenshotProvider.kt:15) 
at com.tarek360.instacapture.Instacapture.captureRx(Instacapture.kt:58) 
at com.tarek360.instacapture.Instacapture.capture(Instacapture.kt:31) 
at com.jisu.sports.ui.matche.view.MatchDetailsActivity$initClick$1.onClick(MatchDetailsActivity.kt:121) 
at android.view.View.performClick(View.java:6266) 
at android.view.View$PerformClick.run(View.java:24730) 
at android.os.Handler.handleCallback(Handler.java:789) 
at android.os.Handler.dispatchMessage(Handler.java:98) 
at android.os.Looper.loop(Looper.java:171) 
at android.app.ActivityThread.main(ActivityThread.java:6684) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:246) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/com.jisu.sports-3BldHbGLK4OEceox2rHrkA==/split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
can you help me

react-native webview canvas Black screen

i use in react-native,code
image
When I trigger the screenshot i get this
image
Normally, it should be
image
canvas tag not right render, i tried Falcon react-native-shot but Didn't solve my problem。

expected member declaration

Hello,
I'm trying to use the library to take a screenshot but there is issue with the code here

    Instacapture.capture(this, object : SimpleScreenCapturingListener() {
        override fun onCaptureComplete(bitmap: Bitmap) {
            //Your code here..

        }
    })

// or in Rx way
    Instacapture.captureRx(this).subscribe { bitmap ->
        //Your code here..
    }

it says "expected member declaration " in these two lines ( Instacapture.captureRx(this).subscribe ) and ( Instacapture.capture(this, object : SimpleScreenCapturingListener() {
)

and for (bitmap )it says unresolved reference

Failed resolution of: Lcom/tarek360/instacapture/Instacapture;

I have a library and would like that library to use Instacapture. My library is included in the Google HelloAR sample application. I have installed Instacapture as per the instruction in the README. However, when I launch my app, I get the following crash:

    --------- beginning of crash
2020-08-11 22:34:35.965 32761-32761/com.google.ar.core.examples.java.helloar E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.google.ar.core.examples.java.helloar, PID: 32761
    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/tarek360/instacapture/Instacapture;
        at com.cambridge.mylibrary.ScreenShotter.takeScreenshot(ScreenShotter.java:139)
        at com.google.ar.core.examples.java.helloar.HelloArActivity$2.run(HelloArActivity.java:164)
        at com.google.ar.core.examples.java.helloar.HelloArActivity.startRepeatingTask(HelloArActivity.java:171)
        at com.google.ar.core.examples.java.helloar.HelloArActivity$1.run(HelloArActivity.java:152)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8107)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.tarek360.instacapture.Instacapture" on path: DexPathList[[zip file "/data/app/com.google.ar.core.examples.java.helloar-bhCcJ--GEjsJ6mxAFvnUYw==/base.apk"],nativeLibraryDirectories=[/data/app/com.google.ar.core.examples.java.helloar-bhCcJ--GEjsJ6mxAFvnUYw==/lib/arm64, /data/app/com.google.ar.core.examples.java.helloar-bhCcJ--GEjsJ6mxAFvnUYw==/base.apk!/lib/arm64-v8a, /system/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.cambridge.mylibrary.ScreenShotter.takeScreenshot(ScreenShotter.java:139) 
        at com.google.ar.core.examples.java.helloar.HelloArActivity$2.run(HelloArActivity.java:164) 
        at com.google.ar.core.examples.java.helloar.HelloArActivity.startRepeatingTask(HelloArActivity.java:171) 
        at com.google.ar.core.examples.java.helloar.HelloArActivity$1.run(HelloArActivity.java:152) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:237) 
        at android.app.ActivityThread.main(ActivityThread.java:8107) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100) 

Any idea what is causing the issue? I've tried opening Instacapture, compiling it to .aar and throwing it in my libs dir and then modifying the gradle files, but I have the same issue.

java.lang.NoClassDefFoundError: rx.plugins.RxJavaHooks

java.lang.NoClassDefFoundError: rx.plugins.RxJavaHooks
at rx.Observable.create(Observable.java:98)
at rx.Observable.defer(Observable.java:1773)
at com.tarek360.instacapture.screenshot.ViewsBitmapObservable.get(ViewsBitmapObservable.kt:20)
at com.tarek360.instacapture.screenshot.ScreenshotProvider.getScreenshotBitmap(ScreenshotProvider.kt:16)
at com.tarek360.instacapture.Instacapture.captureRx(Instacapture.kt:58)
at com.tarek360.instacapture.Instacapture.capture(Instacapture.kt:31)

java.lang.NoClassDefFoundError: Failed resolution of: Lrx/functions/Func0

java.lang.NoClassDefFoundError: Failed resolution of: Lrx/functions/Func0;
at com.tarek360.instacapture.screenshot.ScreenshotProvider.getScreenshotBitmap(ScreenshotProvider.kt:15)
at com.tarek360.instacapture.Instacapture.captureRx(Instacapture.kt:58)
at com.tarek360.instacapture.Instacapture.capture(Instacapture.kt:31)
//-----
Instacapture.capture(activity, object : SimpleScreenCapturingListener() {
override fun onCaptureComplete(bitmap: Bitmap) {
}

        override fun onCaptureFailed(e: Throwable) {
            super.onCaptureFailed(e)
        }
    })

textureview

for (int i = 0; i < viewRoots.length; i++) {
View view = (View) getFieldValue(FIELD_NAME_VIEW, viewRoots[i]);
if(view.getContext() instanceof LiveActivity2){
//I have a textureview in LiveActivity2
//if i don't add this line,it will capture my mainactivity and the textureview will be invisiable in some case
rootViews.add(new RootViewInfo(view, params[i]));
}
}

Can't capture google map fragment

When I capture google map fragment result is black screen with logo google

My lib version
implementation 'com.github.tarek360:instacapture:2.0.1'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'

My layout

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/map"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activity.main.MainActivity" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

176963082_896292587602716_3825247688529560120_n

OutOfMemoryError

Failed to allocate a 14745612 byte allocation with 3531416 free bytes and 3MB until OOM
com.tarek360.instacapture.screenshot.ScreenshotTaker.getScreenshotBitmap

com.tarek360.instacapture.screenshot.ScreenshotTaker.getScreenshotBitmap (ScreenshotTaker.kt:56)
com.tarek360.instacapture.screenshot.ViewsBitmapObservable$get$1.call (ViewsBitmapObservable.kt:20)
com.tarek360.instacapture.screenshot.ViewsBitmapObservable$get$1.call (ViewsBitmapObservable.kt:14)

InstaCapture Hangs the UI thread for a while

I have a Video calling app and in that I am implementing image capturing every second, so my live stream remains still because of that. is there any way I can make image capturing stuff off the UI thread and same time I can chat seamlessly?

Please suggest if there is other way! to achieve above mentioned task. Thanks, InstaCapture is working fine and I do appreciate your effort for making this library.

specific area capture

How do you know if you ever want to do a specific area without moving the whole screen?

InstaCapture crashes on LGV30

Fatal Exception: java.lang.InternalError

java.lang.Class.getDeclaredField (Class.java)

  | rx.internal.util.unsafe.UnsafeAccess.addressOf (UnsafeAccess.java:112)
  | rx.internal.util.unsafe.SpscArrayQueueProducerFields. (SpscArrayQueue.java)
  | rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber. (OperatorObserveOn.java)
  | rx.internal.operators.OperatorObserveOn.call (OperatorObserveOn.java:74)
  | rx.internal.operators.OperatorObserveOn.call (OperatorObserveOn.java:40)
  | rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:44)
  | rx.internal.operators.OnSubscribeLift.call (OnSubscribeLift.java:30)
  | rx.Observable.subscribe (Observable.java:10246)
  | rx.Observable.subscribe (Observable.java:10213)
  | com.tarek360.instacapture.Instacapture.capture (Instacapture.kt:31)

Instacapture-2.0.0-beta missing <Bitmap> for captureRx(activity, ignoredViews).subscribe(new Subscriber() {

Hi there,

There is a difference between physical clone (download from instacapture:2.0.0-beta) and [compile "com.github.tarek360:instacapture:2.0.0-beta" ]

From compile "com.github.tarek360:instacapture:2.0.0-beta”
Missing "Bitmap" for Subscriber

public class Instacapture {
private static final String MESSAGE_IS_ACTIVITY_RUNNING = "Is your activity running?";
private static final String ERROR_SCREENSHOT_CAPTURE_FAILED = "Screenshot capture failed";

public Instacapture() {
}

public static void capture(@NonNull Activity activity, @NonNull final ScreenCaptureListener screenCaptureListener, @Nullable View... ignoredViews) {
    screenCaptureListener.onCaptureStarted();
    captureRx(activity, ignoredViews).subscribe(**new Subscriber()** {
        public void onCompleted() {
        }

        public void onError(Throwable e) {
            Logger.e("Screenshot capture failed");
            Logger.printStackTrace(e);
            screenCaptureListener.onCaptureFailed(e);
        }

        public void onNext(Bitmap bitmap) {
            screenCaptureListener.onCaptureComplete(bitmap);
        }
    });
}


}

From physical clone from GitHub:
public class Instacapture {

private static final String MESSAGE_IS_ACTIVITY_RUNNING = "Is your activity running?";
private static final String ERROR_SCREENSHOT_CAPTURE_FAILED = "Screenshot capture failed";

public static void capture(@NonNull Activity activity,
                           @NonNull final ScreenCaptureListener screenCaptureListener,
                           @Nullable View... ignoredViews) {

    screenCaptureListener.onCaptureStarted();

    captureRx(activity, ignoredViews).subscribe(**new Subscriber<Bitmap>()** {
        @Override
        public void onCompleted() {
        }

        @Override
        public void onError(final Throwable e) {
            Logger.e(ERROR_SCREENSHOT_CAPTURE_FAILED);
            Logger.printStackTrace(e);
            screenCaptureListener.onCaptureFailed(e);
        }

        @Override
        public void onNext(final Bitmap bitmap) {
            screenCaptureListener.onCaptureComplete(bitmap);
        }
    });

}


}

Is it intended or missing of Bitmap type?

Thanks so much,
KT

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.