Skip to content

Screenshot feature fails on Android 10 #69

@duncancarroll

Description

@duncancarroll

Repro: Run Buglife on an Android 10 phone, targetSdkVersion 29, enable bug reporting by screenshot, and take a screenshot.

Results in the following stacktrace:

2019-10-25 10:52:29.480 29152-29169/audio.breaker E/com.Buglife: Error copying screenshot!
    java.io.FileNotFoundException: /storage/emulated/0/Pictures/Screenshots/Screenshot_20191025-105229.png: open failed: EACCES (Permission denied)
        at libcore.io.IoBridge.open(IoBridge.java:496)
        at java.io.FileInputStream.<init>(FileInputStream.java:159)
        at com.buglife.sdk.IOUtils.copy(IOUtils.java:85)
        at com.buglife.sdk.Client.makeCachedScreenshot(Client.java:272)
        at com.buglife.sdk.Client.onScreenshotInvocationMethodTriggered(Client.java:147)
        at com.buglife.sdk.InvocationMethodManager$2.onScreenshotTaken(InvocationMethodManager.java:109)
        at com.buglife.sdk.ScreenshotContentObserver$2.onChange(ScreenshotContentObserver.java:131)
        at android.database.ContentObserver.onChange(ContentObserver.java:147)
        at android.database.ContentObserver.dispatchChange(ContentObserver.java:198)
        at android.database.ContentObserver.access$000(ContentObserver.java:28)
        at android.database.ContentObserver$Transport.onChange(ContentObserver.java:233)
        at android.database.IContentObserver$Stub.onTransact(IContentObserver.java:98)
        at android.os.Binder.execTransactInternal(Binder.java:1021)
        at android.os.Binder.execTransact(Binder.java:994)
     Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
        at libcore.io.Linux.open(Native Method)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:252)
        at libcore.io.ForwardingOs.open(ForwardingOs.java:167)
        at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7255)
        at libcore.io.IoBridge.open(IoBridge.java:482)
        at java.io.FileInputStream.<init>(FileInputStream.java:159) 
        at com.buglife.sdk.IOUtils.copy(IOUtils.java:85) 
        at com.buglife.sdk.Client.makeCachedScreenshot(Client.java:272) 
        at com.buglife.sdk.Client.onScreenshotInvocationMethodTriggered(Client.java:147) 
        at com.buglife.sdk.InvocationMethodManager$2.onScreenshotTaken(InvocationMethodManager.java:109) 
        at com.buglife.sdk.ScreenshotContentObserver$2.onChange(ScreenshotContentObserver.java:131) 
        at android.database.ContentObserver.onChange(ContentObserver.java:147) 
        at android.database.ContentObserver.dispatchChange(ContentObserver.java:198) 
        at android.database.ContentObserver.access$000(ContentObserver.java:28) 
        at android.database.ContentObserver$Transport.onChange(ContentObserver.java:233) 
        at android.database.IContentObserver$Stub.onTransact(IContentObserver.java:98) 
        at android.os.Binder.execTransactInternal(Binder.java:1021) 
        at android.os.Binder.execTransact(Binder.java:994) 

I believe this crash is expected behavior in phones targeting Android 10, as it has restricted app access to system directories and changed the API such that the user must grant access to that specific directory, rather than a blanket grant to READ_EXTERNAL_STORAGE.

https://developer.android.com/training/data-storage/files/external-scoped#permissions-required

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions