<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Super Funicular</title>
    <description>The latest articles on DEV Community by Super Funicular (@superfunicular).</description>
    <link>https://dev.to/superfunicular</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3905292%2F0eab2966-f7d2-41d0-983d-d240a6caa5d4.jpg</url>
      <title>DEV Community: Super Funicular</title>
      <link>https://dev.to/superfunicular</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/superfunicular"/>
    <language>en</language>
    <item>
      <title>Pin the Camera App: How to Stop Someone Closing Your Phone Security Camera Without Locking the Phone</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Tue, 01 Sep 2026 07:15:40 +0000</pubDate>
      <link>https://dev.to/superfunicular/pin-the-camera-app-how-to-stop-someone-closing-your-phone-security-camera-without-locking-the-phone-3he1</link>
      <guid>https://dev.to/superfunicular/pin-the-camera-app-how-to-stop-someone-closing-your-phone-security-camera-without-locking-the-phone-3he1</guid>
      <description>&lt;p&gt;If you have put an old Android phone on a shelf to watch your shop, your gate, or the room where your children sleep, you have already solved the hard problems. The phone records with the screen off, keeps the video on the phone itself, and shows you a live picture in a browser on your own network.&lt;/p&gt;

&lt;p&gt;Then a cousin picks it up to see what it is. A customer waiting at the counter taps the screen. A child presses the round button at the bottom, because pressing it is what that button is for. And the job stops.&lt;/p&gt;

&lt;p&gt;Nobody attacked your camera. Somebody was curious, and Android did what it is designed to do: it went home.&lt;/p&gt;

&lt;p&gt;There is a setting for this. It has been in Android since 2014, it is free, it takes about forty seconds, and in two hundred articles on this blog I have never once written about it. This is that article.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you stop someone from closing your phone security camera app?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Turn on Android's built-in app pinning — Settings, then Security (or Security &amp;amp; privacy), then App pinning — and pin the camera app before you walk away. Google describes it plainly: "You can pin an app's screen to keep it in view until you unpin it." With the screen pinned, the Home and Overview buttons are hidden and other apps cannot be opened, so a casual tap can no longer stop your recording.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Can you lock an Android phone to one app?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Partly. Android has two versions of this. The one you can turn on yourself is &lt;em&gt;screen pinning&lt;/em&gt;, and Google states directly that with it "the person using the device can exit the mode whenever they want." The truly locked version is &lt;em&gt;lock task mode&lt;/em&gt;, and it requires a device policy controller — an enterprise management setup — which is out of reach on an ordinary phone. Pin the screen for the accidental exit. Do not sell it to yourself as a lock.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction is the whole article, so here it is in Google's own words before anything else. From the lock task mode documentation:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Lock task mode and screen pinning are sometimes used interchangeably. Screen pinning appears similar (and provides an immersive experience) but the person using the device can exit the mode whenever they want."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two names, two very different guarantees, and almost everything written about this online blurs them together.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure this actually prevents
&lt;/h2&gt;

&lt;p&gt;Be honest about the threat, because the threat is not a burglar. A person who wants to stop your camera and knows how will stop it — hold the power button, or pull the plug out of the wall. Screen pinning does nothing about either, and I am not going to pretend otherwise.&lt;/p&gt;

&lt;p&gt;What it is genuinely good at is the failure that actually happens in a house or a shop: &lt;strong&gt;somebody touches the phone without meaning to end anything.&lt;/strong&gt; The nephew checking whether it plays videos. The shop assistant picking it up to see the time. The toddler. Google's own example for the feature is exactly this — "you can pin an app and hand your phone to a friend. With the screen pinned, your friend can use only that app." A mounted camera is a phone you have handed to everyone who walks past it, permanently.&lt;/p&gt;

&lt;p&gt;There is a second benefit that surprised me. Google's Android 5.0 notes say that once screen pinning is active, "users cannot see notifications, access other apps, or return to the home screen, until your app exits the mode," and that "the status bar is blank, and user notifications and status information are hidden." I have written a &lt;a href="https://dev.to/superfunicular/your-camera-phone-is-still-signed-in-notifications-secondary-users-private-space-and-why-af"&gt;whole article about what a mounted camera phone silently displays to the room&lt;/a&gt; — message previews, sender names, calendar entries — and a &lt;a href="https://dev.to/superfunicular/lock-everything-except-the-camera-an-android-private-space-walkthrough-for-a-phone-mounted-in-a-4glm"&gt;longer walkthrough of using Private Space to hide the apps behind them&lt;/a&gt;. Neither mentions pinning, and pinning does a good part of that job as a side effect of one toggle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning it on, in order
&lt;/h2&gt;

&lt;p&gt;The path has moved between Android versions and manufacturers, so expect to hunt slightly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open Settings.&lt;/strong&gt; Google's general instructions say &lt;strong&gt;Security&lt;/strong&gt; or &lt;strong&gt;Security &amp;amp; location&lt;/strong&gt;, then &lt;strong&gt;Advanced&lt;/strong&gt;, then &lt;strong&gt;App pinning&lt;/strong&gt;. On newer Pixel devices it is &lt;strong&gt;Security &amp;amp; privacy&lt;/strong&gt;, then &lt;strong&gt;More security settings&lt;/strong&gt;, then &lt;strong&gt;App pinning&lt;/strong&gt;. In 2014 it was Settings, Security, Screen Pinning. If yours is somewhere else again, that is normal — Google's own help page ends with "If you can't find it, get help from your device manufacturer."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn the toggle on.&lt;/strong&gt; On Pixel Tablet the switch reads &lt;strong&gt;Use app pinning&lt;/strong&gt;; elsewhere, &lt;strong&gt;App pinning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the camera app and get it into the state you want left running.&lt;/strong&gt; Pinning preserves what is on screen; it does not configure anything for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the Overview / Recents screen&lt;/strong&gt; and pin the app from there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test the exit before you walk away.&lt;/strong&gt; Google documents three unpin gestures: gesture navigation, "Swipe up and hold"; 2-button navigation, "Touch and hold Back and Home"; 3-button navigation, "Touch and hold Back and Overview."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A tip that costs nothing: do step 5 twice, once with the screen freshly woken. The gesture is unusual enough to forget, and a camera phone is a device you may not touch again for weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The credential prompt, and a contradiction worth knowing about
&lt;/h2&gt;

&lt;p&gt;You would like the phone to demand a PIN before anyone unpins it. That option exists — but whether you get a choice about it is unclear from Google's own documentation, because its two help pages say different things.&lt;/p&gt;

&lt;p&gt;The general Android help page states it as automatic:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When app pinning is on, you need to enter your PIN, pattern, or password before you can unpin."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Pixel Tablet help page states it as an option you are offered:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When app pinning is on, you'll see an option to ask for your PIN, pattern, or password before unpinning."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both are first-party Google pages, they do not agree, and neither quotes the exact wording of the switch. &lt;strong&gt;So verify it on your own device rather than trusting either page, or this one.&lt;/strong&gt; Pin the app, try to unpin it, and see whether you are challenged. If you are not, go back into app pinning settings and look for the toggle. It is the only thing standing between "a curious person cannot casually exit" and "a curious person cannot exit at all."&lt;/p&gt;

&lt;h2&gt;
  
  
  The stronger version you probably cannot have
&lt;/h2&gt;

&lt;p&gt;Since somebody always asks: yes, Android can genuinely lock a device to one app. It is called lock task mode, and the documentation is clear that it is not for individuals.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Only apps that have been allowlisted by a device policy controller (DPC) can run when the system is in lock task mode."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With a DPC in place, an administrator gets the controls you actually wanted. They can suppress the menu that appears when you long-press power — "a user typically can't power off the device if you disable this dialog." They can mute and lock the volume. They can make an app the device's home app so "it's launched automatically when the device starts up."&lt;/p&gt;

&lt;p&gt;To get there you must establish a device owner, and the documented route runs through &lt;code&gt;adb shell dpm set-device-owner&lt;/code&gt; on a device with no accounts on it. That is a factory reset, a computer, a cable and a command line — for a phone that was meant to be the cheap, low-effort option. For a shop owner with one spare handset that is not a realistic path, and I would rather say so than write a tutorial nobody can follow.&lt;/p&gt;

&lt;p&gt;So: &lt;strong&gt;the weak version is one toggle away, the strong version is behind an enterprise setup.&lt;/strong&gt; Use the weak version, and know what you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the documentation does not tell you
&lt;/h2&gt;

&lt;p&gt;Six real gaps. I went looking for each in Google's own pages and did not find them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Whether pinning survives a reboot is not documented anywhere I can find&lt;/strong&gt; — not the Android help page, the Pixel page, the lock task guide, the Android 5.0 notes, or the CDD. No Google page says it persists; none says it is cleared. If you live somewhere with regular power cuts, this is the gap that matters most to you, and you can close it yourself in two minutes: pin the app, restart the phone, look. A camera that comes back unpinned after every outage needs somebody to walk over and re-pin it — and &lt;a href="https://dev.to/superfunicular/what-happens-to-a-phone-security-camera-during-a-power-cut-or-an-internet-outage-they-are-not-the-40o5"&gt;a power cut and an internet outage already do very different things to a phone camera&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens when the screen turns off and back on while pinned is not documented either.&lt;/strong&gt; The nearest statements are about lock task mode, and I will not extrapolate one to the other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether you can still drag down the notification shade while pinned is not stated for screen pinning.&lt;/strong&gt; The blank-status-bar language is there; the shade itself is only addressed as something a device policy controller can toggle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing addresses incoming calls&lt;/strong&gt;, in either mode, on any page I read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The power button under user screen pinning is never discussed.&lt;/strong&gt; Everything about suppressing the power menu belongs to the enterprise path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The exact on-screen label of the require-a-PIN switch is never quoted&lt;/strong&gt; — which is precisely why two help pages can contradict each other without either being obviously wrong.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Will your phone even have this?
&lt;/h2&gt;

&lt;p&gt;Almost certainly — and this is the good news if you are running an older or budget handset. Screen pinning arrived in Android 5.0 ("Android 5.0 introduces a new screen pinning API that lets you temporarily restrict users from leaving your task or being interrupted by notifications") and it is not optional for manufacturers. The requirement is still in the Android 16 Compatibility Definition Document:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"MUST implement the screen pinning behavior and provide the user with a settings menu to toggle the feature."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is a condition attached — it applies to implementations that include the recents navigation key — but in practice, if your phone has a Recents button or gesture, the feature is supposed to be there. A phone from 2016 running a forgotten version of Android has this. No new device, no subscription, no account.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five-minute version
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Turn on &lt;strong&gt;App pinning&lt;/strong&gt; in Settings (Security, or Security &amp;amp; privacy).&lt;/li&gt;
&lt;li&gt;Open the camera app, get it into the state you want, pin it from Recents.&lt;/li&gt;
&lt;li&gt;Check whether unpinning asks for your PIN. If not, find that option and turn it on.&lt;/li&gt;
&lt;li&gt;Learn the unpin gesture for &lt;em&gt;your&lt;/em&gt; navigation mode, and practise it once.&lt;/li&gt;
&lt;li&gt;Test a reboot, because nobody has documented what happens after one.&lt;/li&gt;
&lt;li&gt;Remember what you bought: protection against the accidental exit, not against a person who means it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Background Camera RemoteStream works on the same principle — an old Android phone recording with the screen off, video kept on the device rather than on somebody's server, and a live view you open in a browser on your own network with nothing to install on the second device. Pinning is a good companion to that, because a camera any passer-by can close is not really unattended. It is on &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt;, and there is more at &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/superfunicular/how-to-watch-your-shop-with-an-old-android-phone-no-internet-plan-no-subscription-no-credit-card-1bdl"&gt;How to watch your shop with an old Android phone — no internet plan, no subscription, no credit card&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/superfunicular/your-camera-phone-is-still-signed-in-notifications-secondary-users-private-space-and-why-af"&gt;Your camera phone is still signed in: notifications, secondary users and Private Space&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/superfunicular/lock-everything-except-the-camera-an-android-private-space-walkthrough-for-a-phone-mounted-in-a-4glm"&gt;Lock everything except the camera: an Android Private Space walkthrough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/superfunicular/what-happens-to-a-phone-security-camera-during-a-power-cut-or-an-internet-outage-they-are-not-the-40o5"&gt;What happens to a phone security camera during a power cut or an internet outage?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Android Help, "Pin &amp;amp; unpin screens": &lt;a href="https://support.google.com/android/answer/9455138?hl=en" rel="noopener noreferrer"&gt;https://support.google.com/android/answer/9455138?hl=en&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pixel Tablet Help, app pinning: &lt;a href="https://support.google.com/googlepixeltablet/answer/13592197?hl=en" rel="noopener noreferrer"&gt;https://support.google.com/googlepixeltablet/answer/13592197?hl=en&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Android Developers, "Lock task mode": &lt;a href="https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode" rel="noopener noreferrer"&gt;https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Android Developers, dedicated devices cookbook: &lt;a href="https://developer.android.com/work/dpc/dedicated-devices/cookbook" rel="noopener noreferrer"&gt;https://developer.android.com/work/dpc/dedicated-devices/cookbook&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Android 5.0 platform highlights (screen pinning): &lt;a href="https://developer.android.com/about/versions/lollipop/android-5.0" rel="noopener noreferrer"&gt;https://developer.android.com/about/versions/lollipop/android-5.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Android 16 Compatibility Definition Document, section 3.8.3: &lt;a href="https://source.android.com/docs/compatibility/16/android-16-cdd" rel="noopener noreferrer"&gt;https://source.android.com/docs/compatibility/16/android-16-cdd&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>privacy</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>You Don't Live There: Setting Up a Phone Camera in a House You Only Visit</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Mon, 31 Aug 2026 21:08:10 +0000</pubDate>
      <link>https://dev.to/superfunicular/you-dont-live-there-setting-up-a-phone-camera-in-a-house-you-only-visit-3kl5</link>
      <guid>https://dev.to/superfunicular/you-dont-live-there-setting-up-a-phone-camera-in-a-house-you-only-visit-3kl5</guid>
      <description>&lt;p&gt;Almost every practical instruction I have written about home cameras ends the same way: go back and have a look at it.&lt;/p&gt;

&lt;p&gt;Set it up where it will really live, then check on it the next day. Have somebody walk the path at a normal pace, then open the file and see what you actually got. Turn the power off deliberately and watch what the thing asks for when it comes back. That is all good advice. Every line of it quietly assumes something I have never said out loud, which is that you can walk back into the room.&lt;/p&gt;

&lt;p&gt;Plenty of these cameras are not in the room. They are in a parent's front hall, in a place somebody lets out, in a house that is only lived in at weekends. Whoever sets it up is a visitor there. They get an afternoon. The next chance to change anything is weeks away and involves a journey.&lt;/p&gt;

&lt;p&gt;That changes what a good decision looks like, and not in the direction people expect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Iterating is a privilege of proximity
&lt;/h2&gt;

&lt;p&gt;At home, the right move is usually to try something and adjust it. Put the camera up, live with it, notice that the hedge fills the top third of the frame in July, move it six inches. The setup improves over a few weeks because you keep walking past it. Every "just tweak it later" recommendation is written for that person.&lt;/p&gt;

&lt;p&gt;Somewhere you visit, an arrangement that would benefit from adjusting is an arrangement that stays wrong. There is no later. There is one afternoon, and then there is however many months until the next one.&lt;/p&gt;

&lt;p&gt;So the thing to optimise for is not the best placement. It is the placement with the smallest downside if it turns out to be mediocre, and the fewest ways to quietly stop working while nobody is looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "dull" means in practice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A view that will still make sense in December.&lt;/strong&gt; Foliage, sun angle, and what the room is used for all move with the season. A frame that is perfect in August and useless in November is a frame you will not be there to fix.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A surface nobody needs.&lt;/strong&gt; A shelf that gets tidied, a windowsill that gets a plant, a hall table that collects post — all of these are places a camera gets nudged, turned, or moved into a drawer. Pick the boring corner nobody has a plan for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A socket nobody will want back.&lt;/strong&gt; This is the one that quietly ends most remote setups. A phone running as a camera needs mains power indefinitely, and if it is sharing the only reachable outlet with the kettle or the vacuum, it will lose that argument.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wi-Fi where the phone actually sits, not where you tested it.&lt;/strong&gt; Signal in the hall is not signal behind the bookcase in the hall. Check it in the final position, before you leave.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Something that comes back on its own after a power cut.&lt;/strong&gt; Power will go out at some point in the months you are not there. A setup that needs a human to tap something afterwards is a setup that has ended.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is exciting. That is the point. A remote install is judged on how it behaves unattended for six months, not on how clever it looks on the day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The person who lives with it did not choose it
&lt;/h2&gt;

&lt;p&gt;There is a second constraint that gets skipped almost universally, and it has nothing to do with placement.&lt;/p&gt;

&lt;p&gt;Somebody lives in that house. They did not pick this camera. They are not going to troubleshoot it. They are the one it sits beside all day, every day, long after the person who installed it has driven home.&lt;/p&gt;

&lt;p&gt;That means the only control that genuinely has to work is the one that switches it off — and it has to be theirs, without a phone call first. Not "call me and I'll stop the stream." Not a login they do not have. Something they can reach and act on in the room they are standing in.&lt;/p&gt;

&lt;p&gt;Anything more demanding than that is a job handed to somebody who never applied for it. It is also, in practice, the difference between a camera that is still there next year and one that has been unplugged and put in a cupboard with no explanation.&lt;/p&gt;

&lt;p&gt;If the setup cannot survive the resident turning it off whenever they feel like it, the setup was wrong. Consent that has to be re-negotiated by telephone is not consent, it is an obligation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do the checking while you are standing there
&lt;/h2&gt;

&lt;p&gt;The last thing worth saying is about sequencing. Every verification step in every guide I have written takes about two minutes in person, and is close to impossible from a hundred miles away:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put the phone in its &lt;strong&gt;final&lt;/strong&gt; position, powered, on the network.&lt;/li&gt;
&lt;li&gt;Walk the path you actually care about, at a normal pace. Not a slow demonstration walk.&lt;/li&gt;
&lt;li&gt;Open the resulting file or stream and look at it. Do not assume — look.&lt;/li&gt;
&lt;li&gt;Pull the power for thirty seconds, restore it, and watch what happens without touching anything.&lt;/li&gt;
&lt;li&gt;Show the resident the off switch, and watch them use it once.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do all five before you leave. Every one of them that you defer becomes a question you cannot answer from home, and the honest answer to most of those questions turns out to be "no, it was not recording."&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the software fits
&lt;/h2&gt;

&lt;p&gt;Most of the above is placement and social arrangement, not software — but the software choice does interact with it in one specific way. A remote install is easier to get right when the recording lives on the device rather than routing through an account and a metered plan, because there is one fewer thing to expire, re-authenticate, or start charging while nobody is watching.&lt;/p&gt;

&lt;p&gt;I make one of the apps in this category, &lt;strong&gt;Background Camera RemoteStream&lt;/strong&gt; — an Android app that turns a spare phone into a camera you can check on, with the recording kept on the device. I am not going to claim it is the only thing that does this; there are other apps and self-hosted options, and some of them are good. But if you want to try the approach on a phone you already own, it is free:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Play Store: &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.superfunicular.digicam&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;More on the approach: &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;https://superfunicular.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The general point stands whatever you install. Advice written for a camera you walk past every day is the wrong advice for a camera in a house you visit twice a year. Different constraint, different answer.&lt;/p&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>iot</category>
      <category>ux</category>
    </item>
    <item>
      <title>Android Guarantees Six Concurrent Video Encoder Sessions - and Your Old Phone Is Probably Exempt</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Mon, 31 Aug 2026 20:19:13 +0000</pubDate>
      <link>https://dev.to/superfunicular/android-guarantees-six-concurrent-video-encoder-sessions-and-your-old-phone-is-probably-exempt-2pak</link>
      <guid>https://dev.to/superfunicular/android-guarantees-six-concurrent-video-encoder-sessions-and-your-old-phone-is-probably-exempt-2pak</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Android's Compatibility Definition Document does require six concurrent hardware video encoder sessions — but only from devices that declare a &lt;strong&gt;Media Performance Class&lt;/strong&gt;. A budget or older handset that reports &lt;code&gt;MEDIA_PERFORMANCE_CLASS = 0&lt;/code&gt; is exempt from that requirement entirely. The only number that describes &lt;em&gt;your&lt;/em&gt; phone is &lt;code&gt;getMaxSupportedInstances()&lt;/code&gt;, and its own documentation calls it "a hint for an upper bound." If you are building a 24/7 camera app, the encoder is a second scarce resource with its own limit, its own advertising API, and its own way of being taken away from you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wrote up the camera side of this question a couple of weeks ago: &lt;a href="https://dev.to/superfunicular/one-camera-two-consumers-why-recording-and-live-streaming-at-the-same-time-depends-on-your-14i1"&gt;whether a phone can record and live-stream at once depends on its Camera2 hardware level&lt;/a&gt;, because Android publishes a table of stream combinations every device must support, and the lowest tier caps two simultaneous consumers at preview resolution.&lt;/p&gt;

&lt;p&gt;That article was only half the story, and a reader-shaped hole has been sitting in it since.&lt;/p&gt;

&lt;p&gt;Camera2's guarantee is about &lt;strong&gt;frames leaving the sensor&lt;/strong&gt;. It says nothing about what happens after. Two camera output surfaces are not two videos — they are two sources of raw frames that still have to be compressed by something. On any modern Android device that something is a fixed-function hardware block, and there are not very many of it.&lt;/p&gt;

&lt;p&gt;The camera can hand you two streams and the encoder can still say no.&lt;/p&gt;

&lt;h2&gt;
  
  
  How many video encoder sessions can an Android phone run at the same time?
&lt;/h2&gt;

&lt;p&gt;There is no single answer, and the reason is structural rather than evasive. Android specifies a floor, but it applies the floor conditionally. Devices that opt into the performance-class system inherit a hard requirement; devices that do not, do not. Below is what the Compatibility Definition Document actually says, requirement &lt;strong&gt;5.1/H-1-4&lt;/strong&gt;, which lives in section 2.2.7.1 (Handheld Media Performance) rather than in the general video encoding section:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CDD&lt;/th&gt;
&lt;th&gt;Media Performance Class&lt;/th&gt;
&lt;th&gt;Concurrent hardware encoder requirement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Android 11&lt;/td&gt;
&lt;td&gt;&lt;code&gt;R&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6 sessions (AVC or HEVC), any codec combination, at 720p@30fps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android 12&lt;/td&gt;
&lt;td&gt;&lt;code&gt;S&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6 sessions (AVC, HEVC, VP9 or later) at 720p@30fps — "Only 2 instances are required if VP9 codec is present"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android 13&lt;/td&gt;
&lt;td&gt;&lt;code&gt;T&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6 sessions (AVC, HEVC, VP9, AV1 or later) at 1080p@30fps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android 14&lt;/td&gt;
&lt;td&gt;&lt;code&gt;U&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;6 sessions of 8-bit (SDR) encoders — 4 at 1080p@30fps and 2 at 4K@30fps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android 15 / 16&lt;/td&gt;
&lt;td&gt;&lt;code&gt;V&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same 4×1080p + 2×4K split, plus "there MUST NOT be more than 1 frame dropped per second"&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two things in that table matter more than the numbers.&lt;/p&gt;

&lt;p&gt;The first is the &lt;strong&gt;720p→1080p migration&lt;/strong&gt; between Android 12 and 13. If you read a Stack Overflow answer from 2021 that says "six encoders at 720p" and you are targeting a modern device, that sentence has quietly changed meaning underneath you.&lt;/p&gt;

&lt;p&gt;The second is the qualifier that every one of those rows carries, and that almost nobody quotes with them. Each requirement is introduced with a conditional: &lt;em&gt;if&lt;/em&gt; the device returns a given constant for &lt;code&gt;MEDIA_PERFORMANCE_CLASS&lt;/code&gt;. A handset that declares no performance class at all — which is the default, and which is what an enormous number of shipping budget devices do — is not in breach of anything when it supports two encoder instances instead of six. It was never asked for six.&lt;/p&gt;

&lt;p&gt;This is the part that matters if the phone you are targeting cost $80 and shipped four years ago. The reassuring number in the spec is not a promise to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number that does describe your phone
&lt;/h2&gt;

&lt;p&gt;The CDD's companion requirement, &lt;strong&gt;5.1/H-1-3&lt;/strong&gt;, is the useful one, because it is about disclosure rather than capability. Devices MUST advertise the maximum number of concurrent encoder sessions "via the &lt;code&gt;CodecCapabilities.getMaxSupportedInstances()&lt;/code&gt; and &lt;code&gt;VideoCapabilities.getSupportedPerformancePoints()&lt;/code&gt; methods."&lt;/p&gt;

&lt;p&gt;So the phone will tell you. You have to ask.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;MediaCodecList&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;MediaCodecList&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MediaCodecList&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;REGULAR_CODECS&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MediaCodecInfo&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCodecInfos&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEncoder&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;type&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSupportedTypes&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MediaFormat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MIMETYPE_VIDEO_AVC&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCapabilitiesForType&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getMaxSupportedInstances&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;i&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;TAG&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getName&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" -&amp;gt; "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;getMaxSupportedInstances()&lt;/code&gt; has been available since API 23, and on the device side it is not a computed value — it is read from a static configuration file the OEM ships. The AOSP integration docs describe the exact knob: a &lt;code&gt;&amp;lt;Limit name="concurrent-instances" max="…" /&amp;gt;&lt;/code&gt; element inside the codec's entry in &lt;code&gt;/etc/media_codecs.xml&lt;/code&gt;, enforced at certification time by a CTS test named &lt;code&gt;testGetMaxSupportedInstances&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That has a consequence worth internalising. The value is a vendor's declaration, checked once, about a static ceiling. It is not a live measurement of what is free right now. The javadoc is unusually candid about this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is a hint for an upper bound. Applications should not expect to successfully operate more instances than the returned value, but the actual number of concurrently operable instances may be less as it depends on the available resources at time of use."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read that twice if you are writing an always-on app. It says the ceiling is real and the floor is nothing. You can query a &lt;code&gt;4&lt;/code&gt;, be the only camera app running, and still fail to allocate your second encoder — because a video call, a screen recorder, or the OS itself got there first.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;getSupportedPerformancePoints()&lt;/code&gt; is the companion API (added in API 29), and it carries the concurrency caveat explicitly: performance points "assume a single active codec," and for multi-codec use cases you are told to take the highest pixel count and add the frame rates of each individual codec. It is also allowed to return &lt;code&gt;null&lt;/code&gt; — notably on devices upgraded to Android 10 or later without a corresponding vendor image update, which describes a lot of long-lived hardware. Plan for the null.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two failures that look identical and are not
&lt;/h2&gt;

&lt;p&gt;When allocation does not go your way, &lt;code&gt;MediaCodec&lt;/code&gt; throws a &lt;code&gt;CodecException&lt;/code&gt;, and the error code distinguishes two situations that a naive &lt;code&gt;catch&lt;/code&gt; block will flatten into one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;ERROR_INSUFFICIENT_RESOURCE&lt;/code&gt;&lt;/strong&gt; means, per the documentation, "required resource was not able to be allocated." You asked for an encoder and there was not one to give. Nothing of yours was disturbed. This is the polite failure: your existing sessions are intact, and the right response is usually to degrade — drop the second stream to a lower resolution, or run one instead of two — rather than to give up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;ERROR_RECLAIMED&lt;/code&gt;&lt;/strong&gt; is the one that should change your architecture. It means "the resource manager reclaimed the media resource used by the codec." Something else on the device wanted an encoder, the system decided that something outranked you, and it took yours. The documentation is blunt about what you are allowed to do next: "the codec must be released, as it has moved to terminal state."&lt;/p&gt;

&lt;p&gt;That last clause is easy to skim past and expensive to get wrong. A reclaimed codec is &lt;strong&gt;not&lt;/strong&gt; retryable in place. It is not a transient hiccup you can sleep on and resume. &lt;code&gt;CodecException&lt;/code&gt; exposes two predicates — &lt;code&gt;isRecoverable()&lt;/code&gt;, which means you can &lt;code&gt;stop()&lt;/code&gt;, &lt;code&gt;configure()&lt;/code&gt;, and &lt;code&gt;start()&lt;/code&gt; your way back, and &lt;code&gt;isTransient()&lt;/code&gt;, which means resources are temporarily unavailable and the call may be retried later — and the docs note the two are never true at the same time. Reclaim is documented as neither. The object is dead; you rebuild from scratch, and you decide what your app looks like in the interval.&lt;/p&gt;

&lt;p&gt;For a recorder that is meant to run unattended for weeks, "what your app looks like in the interval" is the entire design problem. Nobody is holding the phone. Nobody will tap &lt;strong&gt;Retry&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who wins, and how honest the documentation actually is
&lt;/h2&gt;

&lt;p&gt;Here is where I want to be careful, because this is the point at which most write-ups start asserting things that the official documentation does not say.&lt;/p&gt;

&lt;p&gt;The public docs describe reclaim in terms of &lt;strong&gt;priority between processes&lt;/strong&gt;, not in terms of foreground and background. The SoC integration guide says a vendor error code is used by the media resource manager "as the indicator to potentially preempt media resource from other lower priority process," and the vendor-facing priority knob it documents, &lt;code&gt;OMX_IndexConfigPriority&lt;/code&gt;, has exactly two levels — realtime and best-effort — on an inverted scale where a higher number means lower priority. It is explicitly framed as "a hint used at codec configuration and resource planning."&lt;/p&gt;

&lt;p&gt;Since Android 15 there is an app-facing knob too: &lt;code&gt;MediaFormat.KEY_IMPORTANCE&lt;/code&gt;. The resource manager "may use the codec importance, along with other factors when reclaiming codecs from an application." Two qualifications come attached to it in the same documentation, and both limit how much you should lean on it. "The specifics of reclaim policy is device dependent." And the value is "only relevant within the context of that application" — it lets you tell the system which of &lt;em&gt;your own&lt;/em&gt; codecs to sacrifice first. It is not a way to outrank someone else's video call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I could not find in any official Google documentation is a statement that the media codec resource manager considers whether your app is in the foreground.&lt;/strong&gt; It is a reasonable inference from how the AOSP implementation derives process priority, and in practice foregrounded apps do tend to win. But it is an inference from source, not a documented contract, and a documented contract is the only thing you can safely design against. If someone tells you a foreground service is therefore safe from encoder reclaim, ask them for the page. I looked, and I do not believe it exists.&lt;/p&gt;

&lt;p&gt;The one piece of unambiguous official guidance is aimed at the other side of the problem — being a good citizen rather than a protected one. The &lt;code&gt;stop()&lt;/code&gt; javadoc says plainly that to ensure the codec is available to other clients you should call &lt;code&gt;release()&lt;/code&gt; and "don't just rely on garbage collection to eventually do this for you." That is worth honouring even when you are the app that wants to keep running, because in a world of two encoder instances, the app that holds one it is not using is the reason someone else's recording just died.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you are building one of these
&lt;/h2&gt;

&lt;p&gt;The design conclusions are unglamorous and they hold across the whole category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Query, never assume.&lt;/strong&gt; &lt;code&gt;getMaxSupportedInstances()&lt;/code&gt; at startup, per codec, and branch on it. A model-name allowlist is a bug with a maintenance schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat one encoder as the honest baseline.&lt;/strong&gt; Two is an optimisation you attempt and fall back from. On a non-performance-class device it is not owed to you by anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle &lt;code&gt;ERROR_RECLAIMED&lt;/code&gt; as a lifecycle event, not an error.&lt;/strong&gt; Release, rebuild, and — for an unattended recorder — decide explicitly whether the file keeps rolling while the stream does not. That asymmetry is usually the right answer, because the recording is the artifact and the live view is a convenience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release aggressively.&lt;/strong&gt; Every second you hold an encoder you are not writing frames into is a second you are the problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the same shape as &lt;a href="https://dev.to/superfunicular/a-foreground-service-is-not-immortal-what-androids-low-memory-killer-does-to-a-247-camera-on-a-2-1470"&gt;what the low-memory killer does to a long-running camera service&lt;/a&gt;, and the same shape as &lt;a href="https://dev.to/superfunicular/can-two-apps-use-the-same-android-camera-at-once-how-the-os-picks-a-winner-and-why-a-247-2ik3"&gt;what happens when two apps want the lens at once&lt;/a&gt;: Android hands a long-lived background workload a set of resources that were designed around a user holding the phone and looking at it. Nothing about a 24/7 recorder is the case these systems were tuned for. The work is in noticing that early and building the fallback before the device forces you to.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt; is built around exactly this constraint — recording with the screen off, with a live view served over your own network, on hardware that is usually several years old and rarely generous. More on the architecture at &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: Android Compatibility Definition Documents for Android 11–16 (§2.2.7.1, requirements 5.1/H-1-3 and 5.1/H-1-4), source.android.com; &lt;code&gt;MediaCodecInfo.CodecCapabilities&lt;/code&gt;, &lt;code&gt;MediaCodecInfo.VideoCapabilities&lt;/code&gt;, &lt;code&gt;MediaCodec.CodecException&lt;/code&gt; and &lt;code&gt;MediaFormat&lt;/code&gt; API reference, developer.android.com; media codec OEM and SoC integration guides, source.android.com. CDD figures were read from the version-specific documents and reflect the requirement text as published for each release; Android 17's CDD moves these counts out into a separate Media Performance Class definition, so the figures above are quoted through Android 16.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>programming</category>
      <category>mobile</category>
      <category>performance</category>
    </item>
    <item>
      <title>The One Thing a 24/7 Recorder Never Deletes: Android Now Caps How Many Keystore Keys an App Can Own</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sun, 30 Aug 2026 22:55:52 +0000</pubDate>
      <link>https://dev.to/superfunicular/the-one-thing-a-247-recorder-never-deletes-android-now-caps-how-many-keystore-keys-an-app-can-own-d5k</link>
      <guid>https://dev.to/superfunicular/the-one-thing-a-247-recorder-never-deletes-android-now-caps-how-many-keystore-keys-an-app-can-own-d5k</guid>
      <description>&lt;p&gt;Three things pile up inside a long-running Android recorder: files, database rows, and keys.&lt;/p&gt;

&lt;p&gt;Two of those get cleaned up, because you can watch them fill the disk. Somebody notices the phone is full, somebody writes a rotation job, and the problem arrives in a unit everyone already understands. Keys are different. A key alias occupies no space you can look at in Settings, appears in no file listing, survives every clean-up you write for the other two, and until recently had no ceiling.&lt;/p&gt;

&lt;p&gt;Android 17 gives it a ceiling. The ceiling is a number, and for at least one common design it is a number you reach.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the platform actually says
&lt;/h2&gt;

&lt;p&gt;From the Android 17 &lt;a href="https://developer.android.com/about/versions/17/behavior-changes-all" rel="noopener noreferrer"&gt;behavior changes for all apps&lt;/a&gt;, under Per-app keystore limits:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Apps should avoid creating excessive numbers of keys in Android Keystore, because it is a shared resource for all apps on the device. Beginning with Android 17, the system enforces a limit on the number of keys an app can own."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The figures are in the same paragraph: "The limit is 50,000 keys for non-system apps targeting Android 17 (API level 37) or higher, and 200,000 keys for all other apps."&lt;/p&gt;

&lt;p&gt;The failure is typed: "If an app attempts to create keys beyond the limit, the creation fails with a KeyStoreException."&lt;/p&gt;

&lt;p&gt;Three things in that are worth more than the headline number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The limit is not opt-in.&lt;/strong&gt; An app that has not raised its target level is not exempt from the cap; it gets the larger of the two figures. The page closes the last door explicitly — "System apps have a limit of 200,000 keys, regardless of which API level they target." There is no exempt category. There is only a version where the wall is further away.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keystore is described as a shared resource.&lt;/strong&gt; That is the platform's own framing, and it is the part that explains the change. Your key count is not a private matter between your app and its own storage. It is a draw on something every app on the device draws on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The error code depends on what you target, and the difference is unkind.&lt;/strong&gt; An app targeting Android 17 gets a purpose-built code back from &lt;code&gt;getNumericErrorCode()&lt;/code&gt; — the page calls it "returns the new ERROR_TOO_MANY_KEYS value". Everything else gets &lt;code&gt;ERROR_INCORRECT_USAGE&lt;/code&gt;, the generic code for a malformed request. On the large majority of installed devices, in other words, hitting a platform quota will arrive at your crash reporter wearing the label of a programming mistake. The message string carries the real story — "The exception's message string contains information about the key limit" — but a message string is the one part of an exception that dashboards group away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a recorder is the shape that reaches it
&lt;/h2&gt;

&lt;p&gt;Most apps will never approach 50,000 keys, and Google clearly expects that. The apps that get near it are the ones that mint a key per artifact rather than a key per install, and a continuous recorder is the purest example of that shape: it produces artifacts on a fixed clock, forever, with no user action in between.&lt;/p&gt;

&lt;p&gt;The arithmetic is not close to the edge in every design, which is exactly why it is worth writing down rather than worrying about:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;key granularity&lt;/th&gt;
&lt;th&gt;new keys per day&lt;/th&gt;
&lt;th&gt;days to 50,000&lt;/th&gt;
&lt;th&gt;days to 200,000&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;one per five-minute segment&lt;/td&gt;
&lt;td&gt;288&lt;/td&gt;
&lt;td&gt;174&lt;/td&gt;
&lt;td&gt;694&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;one per ten-minute segment&lt;/td&gt;
&lt;td&gt;144&lt;/td&gt;
&lt;td&gt;347&lt;/td&gt;
&lt;td&gt;1,388&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;one per motion clip, forty a day&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;1,250&lt;/td&gt;
&lt;td&gt;5,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;one per hour&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;2,083&lt;/td&gt;
&lt;td&gt;8,333&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;one per calendar day&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;50,000&lt;/td&gt;
&lt;td&gt;200,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Read the first row again. A camera on a five-minute segment clock, encrypting each segment under its own hardware-backed key, exhausts a targeted app's entire allowance in under six months of continuous operation. That is not an exotic setup. Five minutes is a common segment length precisely because it bounds how much you lose to a single interrupted write.&lt;/p&gt;

&lt;p&gt;The second column is the one that decides your fate, and it is a design choice, not a platform constraint. Nothing about encrypting recordings requires a fresh Keystore key per file. The usual pattern is one long-lived Keystore key that wraps a cheap per-file key stored beside the file — the Keystore entry count stays at one no matter how long the camera runs. If you are already doing that, this change is a non-event for you, and you should stop reading here with a clear conscience.&lt;/p&gt;

&lt;h2&gt;
  
  
  The failure mode is not the one you would guess
&lt;/h2&gt;

&lt;p&gt;The interesting case is not the app that deliberately creates 50,000 keys. It is the app that deliberately creates a few and then never deletes any.&lt;/p&gt;

&lt;p&gt;Deleting a recording is a file operation. Deleting the key that recording was encrypted under is a separate call to a separate subsystem, in a separate part of the codebase, with no error if you skip it and nothing visible anywhere if you skip it a thousand times. Every rotation job I have read the description of is written against a storage budget, because storage is what runs out. Nothing runs out on the alias side — or nothing did.&lt;/p&gt;

&lt;p&gt;The cheapest design to write is the one that never deletes anything it does not have to. Android 17 turns that from a tidiness question into a failure with a number attached.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the page does not say, and I am not going to guess
&lt;/h2&gt;

&lt;p&gt;Being precise about the boundary of what I know here matters more than sounding authoritative, so:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whether deleting an alias frees a slot.&lt;/strong&gt; The wording is a limit on "the number of keys an app can own", which reads as a live count rather than a lifetime tally — under that reading, &lt;code&gt;KeyStore.deleteEntry()&lt;/code&gt; gives the slot back. The page does not say so. I have not tested it, and I am not going to assert it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How the count is scoped across users and profiles.&lt;/strong&gt; Keystore entries are per-app-per-user. Whether the quota is applied per user or across all of them is not stated on the page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether StrongBox-backed and TEE-backed entries share one budget.&lt;/strong&gt; Not stated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When it lands on any given handset.&lt;/strong&gt; This is an Android 17 behaviour. Which phone gets Android 17, and when, is a separate question this page does not answer and neither will I.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of those is checkable by somebody with a device and an afternoon. None of them is checkable by reading, and reading is what I did.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find out where you actually stand
&lt;/h2&gt;

&lt;p&gt;The count is readable in a few lines, and it is the first thing worth knowing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;ks&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;security&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;KeyStore&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"AndroidKeyStore"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;aliases&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Collections&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;aliases&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="n"&gt;android&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;util&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;i&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"keys"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"alias count = "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;aliases&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it on a device that has had a build of yours on it for months rather than a fresh emulator. A clean install always looks fine. The whole point of this class of bug is that it is a function of elapsed time, and elapsed time is the one variable a test suite does not have.&lt;/p&gt;

&lt;p&gt;If the number surprises you, the fix is boring and cheap: delete the alias in the same code path that deletes the artifact it belongs to, and treat a leftover alias as a leak the same way you would treat a leftover temp file.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not the storage argument
&lt;/h2&gt;

&lt;p&gt;It looks adjacent to one and it is not. How many bytes a continuous recorder produces, how long you can keep them, and what happens when the card fills up is a genuinely different question with genuinely different arithmetic, and I have written it out at length in &lt;a href="https://dev.to/superfunicular/storage-not-heat-is-the-real-limit-on-247-android-recording-segment-rotation-retention-math-2j5"&gt;Storage, Not Heat, Is the Real Limit on 24/7 Android Recording&lt;/a&gt; — that piece is about bytes, this one is about aliases, and the two budgets are exhausted by different designs at different rates. Likewise, a file that will not open after an interrupted write is &lt;a href="https://dev.to/superfunicular/why-an-interrupted-android-recording-wont-play-moov-atom-scoped-storage-and-two-fixes-59d5"&gt;a container problem, not a key problem&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The reason it is worth separating them is that the storage budget is visible and the key budget is not. You will find out about the first one from a user. You will find out about the second one from a stack trace that says you passed a bad argument.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Android Keystore now has a per-app cap: 50,000 entries for apps targeting Android 17, 200,000 for everyone else and for system apps, and a &lt;code&gt;KeyStoreException&lt;/code&gt; when you cross it. Most apps will never notice. An app that mints a key per recorded artifact and never deletes one will.&lt;/p&gt;

&lt;p&gt;The date it finds out is set by its segment length. Segment length was picked to bound how much a single interrupted write costs you — chosen once, years before anybody had a reason to count keys, to settle a completely different argument.&lt;/p&gt;




&lt;p&gt;We build &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam&amp;amp;utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt;, an Android app for running a phone as a camera with the screen off. More of these write-ups at &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;, all first-party: Android Developers, &lt;a href="https://developer.android.com/about/versions/17/behavior-changes-all" rel="noopener noreferrer"&gt;Behavior changes: all apps&lt;/a&gt; for Android 17 (last updated 14 August 2026), section &lt;em&gt;Per-app keystore limits&lt;/em&gt; — the 50,000/200,000 figures, the shared-resource rationale, the &lt;code&gt;KeyStoreException&lt;/code&gt;, and the &lt;code&gt;ERROR_TOO_MANY_KEYS&lt;/code&gt; / &lt;code&gt;ERROR_INCORRECT_USAGE&lt;/code&gt; split; and the API reference for &lt;a href="https://developer.android.com/reference/android/security/KeyStoreException" rel="noopener noreferrer"&gt;&lt;code&gt;KeyStoreException&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://developer.android.com/reference/java/security/KeyStore" rel="noopener noreferrer"&gt;&lt;code&gt;KeyStore&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>android</category>
      <category>security</category>
      <category>mobile</category>
      <category>programming</category>
    </item>
    <item>
      <title>This week on @Digital_Nomad_Media — 25 new clips (2026-W35)</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sun, 30 Aug 2026 14:03:49 +0000</pubDate>
      <link>https://dev.to/superfunicular/this-week-on-digitalnomadmedia-25-new-clips-2026-w35-43bm</link>
      <guid>https://dev.to/superfunicular/this-week-on-digitalnomadmedia-25-new-clips-2026-w35-43bm</guid>
      <description>&lt;p&gt;Quick weekly digest from my YouTube channel — every clip below is fresh in the last 7 days.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=w1Z7HCwFWIY" rel="noopener noreferrer"&gt;One, two, who, what? ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=w1Z7HCwFWIY" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fznfzgfmjmv890q3n3ier.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;22s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=AYSEoff7_64" rel="noopener noreferrer"&gt;August 13, 2025&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=AYSEoff7_64" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fje18dw6mfe86q4a495n6.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=8Hy7wV3Bzlg" rel="noopener noreferrer"&gt;Why my dog is not a baseball star ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=8Hy7wV3Bzlg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffwbvc7cepsp9ajonpj70.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;22s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=YseKbkKRK-0" rel="noopener noreferrer"&gt;Dog Gone Good Times ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=YseKbkKRK-0" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvkghn9cb70jvhun78rdc.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;51s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=0EmkdXq083g" rel="noopener noreferrer"&gt;Oh no my Pampers! ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=0EmkdXq083g" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr9df38208ff5mcxl0o4i.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;16s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=3YLRfb1e8VQ" rel="noopener noreferrer"&gt;No&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3YLRfb1e8VQ" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhws0sckjge8r7trd0fm2.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;8s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=x3I32DujlUE" rel="noopener noreferrer"&gt;The great furry hunter ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=x3I32DujlUE" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9hxghc0gwjr7lhkrwzkn.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;23s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=4NUGl7K06OQ" rel="noopener noreferrer"&gt;Crib tours with&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=4NUGl7K06OQ" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feur1ygdof859tgzljvw0.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;28s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=oMmZn_fzFzM" rel="noopener noreferrer"&gt;Introducing....... "THE PAPERWORK ASSASSIN"&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oMmZn_fzFzM" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2euxmme476kftygork3k.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;60s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=3Wx2JRUdnSk" rel="noopener noreferrer"&gt;The choir&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=3Wx2JRUdnSk" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4xk7ozkfblz4kf9zastv.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=JwjZKbyTYg8" rel="noopener noreferrer"&gt;Wonderful! ✌️🤠🌹&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=JwjZKbyTYg8" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffs1qjxid23ibm0r6gyu1.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=46GmNKzJtUg" rel="noopener noreferrer"&gt;The rope broke&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=46GmNKzJtUg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgvwpfecogut1mxs543bs.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=v_zlP2D2-_8" rel="noopener noreferrer"&gt;I bought a tiny helicopter for the little people that live under my sink ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=v_zlP2D2-_8" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0d1685ysw3r97j5cbyv6.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;23s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=gH8jTeflS5U" rel="noopener noreferrer"&gt;They won the whole thing ✌️🤠&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=gH8jTeflS5U" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyp1gdef9c706zmhbtkxh.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;57s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=vePuctvhcKA" rel="noopener noreferrer"&gt;Masked Robber's UNPLANNED Heist Caught on Camera!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=vePuctvhcKA" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0yztyrh2f2uzgwgkfpd6.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;16s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=bDboha5LBRk" rel="noopener noreferrer"&gt;Directly into my soul&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=bDboha5LBRk" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxtinwd67fk0zdm3dhe4t.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=ex0SDXGxZHM" rel="noopener noreferrer"&gt;Good morning&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=ex0SDXGxZHM" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6eewtgf19irlwacv0m3s.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;25s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=LTdtVmYCN3g" rel="noopener noreferrer"&gt;Do the chicken dance&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=LTdtVmYCN3g" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuy7sowhrc7x7ra3p7rlh.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=S4ciOa6OY_0" rel="noopener noreferrer"&gt;Gotta ya!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=S4ciOa6OY_0" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feua94bzvp5lfoy2ie3yj.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;12s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=PrHGY_KsVQM" rel="noopener noreferrer"&gt;Boogie Boogie Baby!&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PrHGY_KsVQM" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyul8ebxrxt5zxxhu9cio.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;17s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=lnxGmTvNRb4" rel="noopener noreferrer"&gt;Thinking of you guys&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=lnxGmTvNRb4" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkxhwkd8wxcfrno74ma4u.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;8s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=1UtD7KA7Bfc" rel="noopener noreferrer"&gt;Keep your questions to your self&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=1UtD7KA7Bfc" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw7kpgx89huv802qsfz19.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;30s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=5Axp5FflBzo" rel="noopener noreferrer"&gt;Dog throws man buck naked out the car in hotel parking lot 🤣&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=5Axp5FflBzo" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo177hzmt8bjk8lz2x0jn.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;60s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=cZHm4j2SJrQ" rel="noopener noreferrer"&gt;You know what the Cowboy Dog said to the other Cowboy Dog?&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=cZHm4j2SJrQ" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkrzqb3m19iwljexygmr.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;7s&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://www.youtube.com/watch?v=SAaNXJeu4oI" rel="noopener noreferrer"&gt;This is how the whole complex got banned by&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=SAaNXJeu4oI" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3l3cad2edv6r37p1dxlv.jpg" width="480" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;51s&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  I also built an app — DigiCam
&lt;/h2&gt;

&lt;p&gt;I also made DigiCam, listed as Background Camera RemoteStream on Google Play. It's the world's first screen-off YouTube live streaming app: stream live with the screen off for ~10× the battery life, plus background recording, remote web console control, file-based YouTube Live, and playlists. Privacy-first, all local storage. Free with ads or Pro for the full feature set:&lt;br&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.superfunicular.digicam&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Watch the full channel: &lt;a href="https://www.youtube.com/@Digital_Nomad_Media" rel="noopener noreferrer"&gt;@Digital_Nomad_Media&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tags: #SuperFunicular #DigiCam #DigiNomad #travel #cajun #country #YouTubeShorts #ContentCreator #funny #vanlife&lt;/p&gt;

</description>
      <category>diginomad</category>
      <category>youtube</category>
      <category>indiedev</category>
      <category>digicam</category>
    </item>
    <item>
      <title>The EU's Reporting Clock Starts When Somebody Tells You: What the Cyber Resilience Act Asks of a Camera Vendor Who Cannot See Your Device</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sun, 30 Aug 2026 12:55:40 +0000</pubDate>
      <link>https://dev.to/superfunicular/the-eus-reporting-clock-starts-when-somebody-tells-you-what-the-cyber-resilience-act-asks-of-a-nfj</link>
      <guid>https://dev.to/superfunicular/the-eus-reporting-clock-starts-when-somebody-tells-you-what-the-cyber-resilience-act-asks-of-a-nfj</guid>
      <description>&lt;p&gt;On 11 September 2026 a European regulation starts a stopwatch on camera vendors, and the trigger that starts it is stranger than the deadline it sets.&lt;/p&gt;

&lt;p&gt;The Cyber Resilience Act, Regulation (EU) 2024/2847, entered into force on 10 December 2024, and most of it does not apply until 11 December 2027. Two parts arrive early: Chapter IV, on the notification of conformity assessment bodies, applied from 11 June 2026, and the reporting obligations in Article 14 apply from 11 September 2026. The second one is the one that reaches a person working alone. The European Commission's &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/cra-reporting" rel="noopener noreferrer"&gt;page on the reporting obligations&lt;/a&gt; opens with a sentence that leaves little room: "As of 11 September 2026, manufacturers are required to report actively exploited vulnerabilities and severe incidents impacting the security of products with digital elements".&lt;/p&gt;

&lt;p&gt;The windows are tight. From the same page: "They need to submit an early warning within 24 hours of becoming aware, and a full notification within 72 hours". A final report follows, no later than fourteen days after a corrective measure is available for an actively exploited vulnerability, and within a month for a severe incident. Everything goes to the national Computer Security Incident Response Team and to ENISA through one platform, which the Commission says "will be operational by 11 September 2026".&lt;/p&gt;

&lt;p&gt;I build an Android app that runs a spare phone as a camera. I read this the way anyone with a product on a European store ought to read it, and I came out with a conclusion I had not gone looking for: the duty is easiest to discharge for exactly the architecture I spend most of my time arguing against.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part small developers assume does not reach them
&lt;/h2&gt;

&lt;p&gt;Two definitions in the &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/cra-summary" rel="noopener noreferrer"&gt;Commission's summary of the legislative text&lt;/a&gt; do most of the work here, and neither contains the escape hatch a one-person shop expects to find.&lt;/p&gt;

&lt;p&gt;A manufacturer, in this regulation, is a person who develops products with digital elements and markets them under their own name, "whether for payment, monetisation or free of charge". Free is not an exemption. A side project with an EU install base and no revenue sits inside the definition; the price was never the test.&lt;/p&gt;

&lt;p&gt;And a product with digital elements is "A software or hardware product and its remote data processing solutions, including software or hardware components being placed on the market separately". That second clause is where two camera companies with near-identical marketing copy stop resembling each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  The regulated object is not where the icon is
&lt;/h2&gt;

&lt;p&gt;Remote data processing has its own definition: "Data processing at a distance for which the software is designed and developed by the manufacturer, or under the responsibility of the manufacturer, and the absence of which would prevent the product with digital elements from performing one of its functions".&lt;/p&gt;

&lt;p&gt;That is a functional test rather than an ownership one. If a camera app cannot show you your own hallway without a relay in the middle, the relay is not a separate service the vendor happens to also operate. Remove it and a function of the product stops working, which is precisely the condition the definition describes.&lt;/p&gt;

&lt;p&gt;So for a relay-based camera the regulated object is an app, a handset, a fleet of servers, an account system, and every session that crosses between them. For a camera whose video never leaves the building, the regulated object stops at the edge of the phone.&lt;/p&gt;

&lt;p&gt;Two products, two very different perimeters, and until now no rule obliged either vendor to say which one they were selling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four words the whole thing turns on
&lt;/h2&gt;

&lt;p&gt;Here is the sentence I keep returning to. On the manufacturer's duties, the summary says: "the manufacturer is required to notify actively exploited vulnerabilities and severe incidents having an impact on the security of the product that it becomes aware of".&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That it becomes aware of.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The clock does not start when exploitation begins. It starts when the manufacturer finds out. Which makes the reporting record a measure of how much a vendor can see, and only indirectly a measure of how safe the product is.&lt;/p&gt;

&lt;p&gt;There are four ways a vendor learns that something is being exploited in the field.&lt;/p&gt;

&lt;p&gt;The first is telemetry the vendor built. The product reports on itself: crash traces, session metadata, anomaly counters, the ordinary exhaust of software that talks to its author.&lt;/p&gt;

&lt;p&gt;The second is infrastructure. The vendor watches their own machines and notices a shape that should not be there. Authentication attempts arriving in a burst from one address range. A device requesting streams that belong to a different household.&lt;/p&gt;

&lt;p&gt;The third is that somebody tells you. A researcher, a customer, a CSIRT, a reporter with a deadline and a screenshot.&lt;/p&gt;

&lt;p&gt;The fourth is the one I nearly left out of this article, and leaving it out would have flattered me. Every app on Google Play gets crash and ANR reporting whether or not its developer builds any, and the Play Console documentation is plain about where it comes from: reports arrive "when an app crashes or is not responding on an Android-powered device whose user has opted in to automatically share their usage and diagnostics data". I did not implement that and I cannot switch it off. It is a real channel and I have it.&lt;/p&gt;

&lt;p&gt;It is also a narrow one, in three ways that matter for this regulation. It reports crashes, not exploitation, and the overlap between those two sets is real but partial — plenty of memory-corruption bugs announce themselves as a stack trace, and plenty of successful attacks never crash anything. It covers only the opted-in subset of devices, so it is a sample of unknown size rather than a census. And it is aggregated and dated for product quality: Android vitals updates daily and Google Play "will generally consider the last 28 days of data", which is a sensible window for judging an app's stability and a poor one for a duty measured in twenty-four hours.&lt;/p&gt;

&lt;p&gt;So a vendor running a relay has all four, and the first three are theirs, built for the purpose, and pointed at exactly the events the CRA asks about. A vendor whose product never contacts them has the third, plus a fourth that belongs to the app store, was designed to answer a different question, and would tell me an unusual number of my installs started crashing on Tuesday — which is a hint worth having and is not a report of an actively exploited vulnerability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which is a cost, and it is mine
&lt;/h2&gt;

&lt;p&gt;I have argued more than once that a camera whose video never leaves your own network is a better arrangement than one that streams through a company's infrastructure, and I still think so, for the reasons I usually give. This is the invoice for that position, and I would rather hand it over myself than have it presented later.&lt;/p&gt;

&lt;p&gt;Software that does not phone home cannot tell its author it is under attack. If someone worked out tomorrow how to reach a large number of these installations, the most I would see is whatever fraction of it made the app fall over on a device whose owner had opted into diagnostics, arriving in a dashboard that averages the last twenty-eight days. An attack that works cleanly does not crash anything, and nothing else on my side is collecting the numbers a chart of it would be drawn from. I find out when a person emails me. My twenty-four hours begin at that email and not one second earlier, and the interval between the first exploitation and that email is invisible to everyone, me included.&lt;/p&gt;

&lt;p&gt;That is not something I can engineer away without turning into the other kind of company. Visibility and privacy are opposite ends of one wire. Pulling on either end shortens the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the trade actually buys
&lt;/h2&gt;

&lt;p&gt;The honest version is not that local-only is safer in some general way. It is that local-only has a smaller and differently shaped set of things that can go wrong.&lt;/p&gt;

&lt;p&gt;A severe incident on a centralised camera platform is, by construction, one event with a large blast radius. One key, one storage bucket, one authentication check written the wrong way round, and the number of affected households is a property of the vendor's customer count rather than of anybody's home network. That is the failure that produces the news story, and producing it requires the vendor to have first built a place where everyone's video converges.&lt;/p&gt;

&lt;p&gt;A product that never aggregates anything has no equivalent single point. Whatever goes wrong goes wrong one installation at a time: worse for the household it happens to, and much better for the population.&lt;/p&gt;

&lt;p&gt;So from September the regime will generate two kinds of record, and on paper they will look alike. Vendors with visibility will file reports. Vendors without it will file nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I do not know
&lt;/h2&gt;

&lt;p&gt;I do not know how the phrase &lt;em&gt;severe incident&lt;/em&gt; is meant to read for a product with no service standing behind it. The concept is written for something operational, and software running entirely on hardware belonging to somebody else does not obviously have incidents in that sense. It has vulnerabilities, and the two are given separate deadlines in the text, which suggests the drafters had different things in mind for each.&lt;/p&gt;

&lt;p&gt;I am also reading a summary rather than the Regulation. The Commission attaches its own warning to that document: "This summary has been prepared by the Commission services and is not meant to systematically cover the full scope of the Regulation". Treat everything above as a developer working through a document in public, not as advice from anybody qualified to give it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two details that cut against the drama
&lt;/h2&gt;

&lt;p&gt;The first goes against every vendor, including me. The reporting duty reaches backwards: "Reporting obligations apply to all products with digital elements that have been made available on the Union market, including those already placed on the market before 11 December 2027". Nothing is grandfathered by having shipped early.&lt;/p&gt;

&lt;p&gt;The second goes the other way, and it removes most of the fear from the timeline for anybody small. Under the penalties chapter, "manufacturers that qualify as microenterprises or small enterprises may not be fined for failures to meet the 24h deadline for reporting vulnerabilities and severe incidents". The obligation applies to a one-person developer; the fine for missing the twenty-four hours does not. That is careful drafting, and it means the pressure on a small vendor is reputational and procedural rather than financial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things this gives a buyer, before any of it takes effect
&lt;/h2&gt;

&lt;p&gt;A manufacturer has to fix a support period, and the summary is specific about how it is communicated: "The end date of the support period (including month and year) needs to be clearly and understandably specified at the time of purchase". A camera product that cannot name the month its security fixes stop is going to be out of step with that, and a great many of them cannot name it today.&lt;/p&gt;

&lt;p&gt;And the reporting platform is not restricted to vendors: "It is also possible for any natural or legal person to notify vulnerabilities, cyber threats, incidents and near misses on a voluntary basis through the CRA Single Reporting Platform". The route around a vendor who does not answer their mail is being built into the same system that is about to start timing them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The asymmetry to watch for
&lt;/h2&gt;

&lt;p&gt;From September there will be a growing record of manufacturers reporting exploited vulnerabilities, and the names appearing in it most often will not be the least careful ones. They will be the ones whose products talk back to them. A filed report says something definite. An empty row says two entirely different things at once, and looks the same either way: the product was quiet, or its maker had no means of finding out.&lt;/p&gt;

&lt;p&gt;Mine has the store's crash feed and the contents of my inbox, and neither was built to answer the question the Regulation asks. I would rather say that here than let a year of empty rows imply the flattering reading of it. What I owe in exchange is the direction I can still control: an address that reaches a person when somebody does find something, and a support-period date that is an actual date rather than a posture.&lt;/p&gt;




&lt;p&gt;The app I build for this is &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt;, which records and streams from a spare Android phone with the screen off. The rest of the writing on running an old handset this way is at &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/superfunicular/best-free-no-subscription-apps-to-turn-an-old-android-phone-into-a-local-only-security-camera-4582"&gt;Best free, no-subscription apps to turn an old Android phone into a local-only security camera&lt;/a&gt; — the comparison this regulation sits underneath: which apps keep footage on the phone and which ones do not.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/superfunicular/best-free-security-camera-apps-for-android-in-2026-and-which-ones-quietly-meter-your-free-plan-4jae"&gt;Which free security camera apps quietly meter your free plan&lt;/a&gt; — the same question asked about bandwidth caps rather than disclosure deadlines.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/superfunicular/the-one-thing-a-247-recorder-never-deletes-android-now-caps-how-many-keystore-keys-an-app-can-own-d5k"&gt;Android now caps how many Keystore keys an app can own&lt;/a&gt; — a platform limit that lands on background video recording for the same reason: nobody tells the solo developer it arrived.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;, all first-party: the European Commission's &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/cra-reporting" rel="noopener noreferrer"&gt;Cyber Resilience Act reporting obligations&lt;/a&gt; page and its &lt;a href="https://digital-strategy.ec.europa.eu/en/policies/cra-summary" rel="noopener noreferrer"&gt;summary of the legislative text&lt;/a&gt; for Regulation (EU) 2024/2847; and, for what the app store collects without being asked, Play Console Help on &lt;a href="https://support.google.com/googleplay/android-developer/answer/9859174" rel="noopener noreferrer"&gt;viewing crashes and ANR errors&lt;/a&gt; and &lt;a href="https://support.google.com/googleplay/android-developer/answer/9844486" rel="noopener noreferrer"&gt;Android vitals&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>security</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Your Phone's Screen Is Cracked and the Camera Still Works: Setting Up an Old-Phone Security Camera You Cannot Touch</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sun, 30 Aug 2026 07:11:01 +0000</pubDate>
      <link>https://dev.to/superfunicular/your-phones-screen-is-cracked-and-the-camera-still-works-setting-up-an-old-phone-security-camera-gia</link>
      <guid>https://dev.to/superfunicular/your-phones-screen-is-cracked-and-the-camera-still-works-setting-up-an-old-phone-security-camera-gia</guid>
      <description>&lt;p&gt;Twice in this blog I have told people that a cracked screen does not matter.&lt;/p&gt;

&lt;p&gt;In the shop-monitoring guide it is item one on the shopping list: &lt;em&gt;"An old Android phone. Anything you stopped using. A cracked screen is fine — you will not be looking at it."&lt;/em&gt; In the pet-camera guide I said it again: &lt;em&gt;"If the screen is cracked, that doesn't matter; the screen will be off."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Both sentences are true about the ten months the phone spends on a shelf. Neither is true about the ten minutes before that.&lt;/p&gt;

&lt;p&gt;For those ten minutes you have to unlock the phone, join Wi-Fi, install something, answer four permission dialogs and press start — and every one of those is a &lt;strong&gt;touch&lt;/strong&gt; event, on the exact component that breaks when a phone hits a floor. "You will not be looking at it" answers the display. It does not answer the digitizer. I skipped that, twice, and this is the missing half.&lt;/p&gt;

&lt;p&gt;The good news: Android has had a documented answer since 2011, it costs about a dollar, and it does not involve a computer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you use a phone with a broken screen as a security camera?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Usually yes. A camera phone does not need its display after setup — but setup itself needs input. If the picture is broken and touch still responds, you can drive it as-is. If touch is dead and the picture is fine, a USB mouse plugged in through a $1 OTG adapter gives you a pointer, with no computer, no drivers and no developer settings. If both are dead, you need a PC — and whether that works depends on a decision you had to make before the screen broke.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How do you set up an Android phone when the touchscreen does not work?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Connect a wired USB mouse through a USB-OTG adapter. Android has supported USB host mode since Android 3.1 (API level 12), mice are explicitly among the supported device classes, and Google's own documentation says "No special configuration or driver is needed, in most cases." A pointer appears on screen and you can point, select, drag, scroll and hover through the entire setup. This works on a locked phone, so you can enter the PIN with it too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The screen is two parts, and they die separately
&lt;/h2&gt;

&lt;p&gt;This decides everything else, and almost nobody separates them.&lt;/p&gt;

&lt;p&gt;The panel you look at and the layer that senses your finger are different components stacked on top of each other. A drop can kill one, the other, or both. The spider-web of cracks tells you the glass is broken; it tells you nothing about whether touch still works underneath it.&lt;/p&gt;

&lt;p&gt;So before buying anything, find out which failure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Picture fine, nothing responds to touch&lt;/strong&gt; — dead digitizer. Common with liquid damage and with "the bottom third is dead" phones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screen black, dim, or a mess of lines, but the phone vibrates and rings&lt;/strong&gt; — dying display, working touch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nothing at all&lt;/strong&gt; — either both, or the phone genuinely is dead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quick test for the middle case: plug in a charger and tap where the unlock button would be. Haptic feedback in the right places means touch is alive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: cracked glass, touch still works
&lt;/h2&gt;

&lt;p&gt;Nothing to solve. Set it up normally, put it where it belongs, and let the display go off for good. This is the case both of my earlier articles were quietly assuming, and it is genuinely the majority of drawer phones — cosmetic damage, working hardware. Write down the Wi-Fi password and the screen-lock PIN while you still can; once the phone is on a wall, a forgotten PIN is a real problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: touch is dead, the picture is fine — use a mouse
&lt;/h2&gt;

&lt;p&gt;This is the fix that deserves to be better known, because it is old, official and cheap.&lt;/p&gt;

&lt;p&gt;Android's USB support has two directions. In &lt;strong&gt;host mode&lt;/strong&gt; the phone acts as the host and powers the bus, and the documentation lists what you can plug into it: &lt;em&gt;"Examples of devices include digital cameras, keyboards, mice, and game controllers."&lt;/em&gt; That has been in the platform since Android 3.1 — so essentially any phone you are likely to be repurposing already has it.&lt;/p&gt;

&lt;p&gt;The 3.1 release notes are explicit about what this feels like to use. On setup: &lt;em&gt;"No special configuration or driver is needed, in most cases."&lt;/em&gt; On pointers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"For pointing devices, the platform supports most types of mouse with a single button and optionally a scroll wheel, as well as similar devices such as trackballs. When these are connected, users can interact with the UI using point, select, drag, scroll, hover, and other standard actions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Point, select, drag, scroll, hover — every gesture a setup wizard asks for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you need:&lt;/strong&gt; a USB-OTG adapter matching the phone's port (micro-USB or USB-C), and any wired USB mouse. The adapter is usually the cheapest accessory on the shelf. Choose wired over Bluetooth — pairing is itself a touch-dependent task on a phone you cannot touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 60-second test:&lt;/strong&gt; plug the adapter into the phone, the mouse into the adapter, and move the mouse. If a small arrow appears, you are done deciding; everything from here is clicking. If nothing appears after ten seconds, try a different adapter before giving up — the adapters are the flaky part.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest caveat&lt;/strong&gt;, in Google's own words: &lt;em&gt;"Support for USB host and accessory modes are ultimately dependant on the device's hardware, regardless of platform level."&lt;/em&gt; The platform supporting it does not oblige the manufacturer to wire it up. Budget and entry-level models are the most likely to have left it out. There is no way to know from the spec sheet — you test it.&lt;/p&gt;

&lt;p&gt;If it works, the mouse solves the whole problem, lock screen included: a pointer clicks PIN pad digits exactly like a finger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3: both are dead — and the trap in the obvious answer
&lt;/h2&gt;

&lt;p&gt;Search this problem and you will be told to use &lt;strong&gt;scrcpy&lt;/strong&gt;, a free and open-source tool from Genymobile that mirrors an Android screen to a computer and lets you control it with your own keyboard and mouse. It is excellent, it works from Android 5.0 (API 21) upward, and it is exactly the right shape of tool.&lt;/p&gt;

&lt;p&gt;It also has a requirement stated plainly in its README: &lt;em&gt;"Make sure you enabled USB debugging on your device(s)."&lt;/em&gt; Enabling USB debugging requires tapping through Settings. On the phone. Which is the thing you cannot do.&lt;/p&gt;

&lt;p&gt;And it goes a layer deeper: even with debugging already on, the first connection from a new computer triggers an on-device confirmation. scrcpy's FAQ describes it directly — &lt;em&gt;"When connecting, a popup should open on the device. You must authorize USB debugging."&lt;/em&gt; A popup you must approve, on a screen that shows you nothing.&lt;/p&gt;

&lt;p&gt;So the fork is: if debugging was already on and this computer was already authorized, you are fine — mirror the screen, set the camera up with your desktop mouse, unplug. If it wasn't, the standard advice does not apply to you, however often it is repeated.&lt;/p&gt;

&lt;p&gt;One path remains, and it is a nice piece of symmetry. scrcpy has an OTG mode that &lt;em&gt;"allows to control the device using AOA keyboard, mouse and gamepad, without using adb at all (so USB debugging is not necessary)."&lt;/em&gt; Your computer stops being a debugger and starts pretending to be a plugged-in mouse. No debugging, no authorization popup.&lt;/p&gt;

&lt;p&gt;The catch is the very next sentence: &lt;em&gt;"In this mode, video and audio are disabled."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Control without a picture. You are moving a pointer around a screen you cannot see — workable only if you know the menus by muscle memory and have an identical handset to practise on. I would rather say that than pretend it is a fix.&lt;/p&gt;

&lt;p&gt;Notice what the two working paths have in common. In Case 2 the phone is the USB &lt;strong&gt;host&lt;/strong&gt; and the mouse is the peripheral. In Case 3 the roles invert: the computer is the host, the phone the accessory. Same port, opposite direction, and which one you need is decided by which half of the screen survived.&lt;/p&gt;

&lt;h2&gt;
  
  
  The order to do things in
&lt;/h2&gt;

&lt;p&gt;With limited or borrowed input, do the fiddly things first, while you still have a pointer:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Disable the screen lock&lt;/strong&gt;, so a reboot after a power cut doesn't lock you out of a phone you can't type on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Join the Wi-Fi.&lt;/strong&gt; Typing a WPA2 password is the hardest input task in the process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install the camera app and grant every permission.&lt;/strong&gt; Permission dialogs are modal — an unanswered one blocks everything behind it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Turn off automatic updates&lt;/strong&gt; and set display sleep to the shortest interval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start the camera and confirm the stream from another device&lt;/strong&gt; — any phone or laptop with a browser on the same network.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only then&lt;/strong&gt; mount it and put the mouse away.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 5 matters most: it is the moment the phone's own screen stops being part of the system. From then on the interface is a browser window on a device that works.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the documentation does not tell you
&lt;/h2&gt;

&lt;p&gt;Six real gaps, stated rather than guessed at:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Which phones actually implement USB host mode.&lt;/strong&gt; The docs say it depends on the hardware, and name no models, no list, and no way to check short of trying it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whether a mouse works on the very first boot.&lt;/strong&gt; The out-of-box wizard on a factory-reset phone runs before most of the system does; Google's mouse documentation describes a phone already in use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Input on an encrypted device before first unlock.&lt;/strong&gt; A just-rebooted phone wants its PIN before almost anything works, and none of these pages address that window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Power draw.&lt;/strong&gt; The mouse runs off the phone's battery through the adapter, and no published figure says what that costs a phone with a worn battery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The age of the source.&lt;/strong&gt; The clearest description of Android mouse support sits on the Android 3.1 highlights page — last updated 2024-05-20, describing a 2011 release. It has never been rewritten for the modern platform, which is why the capability is so widely forgotten.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phantom touches.&lt;/strong&gt; A cracked digitizer can register presses nobody made, and a phantom tap can dismiss a dialog or stop a recording. Nothing documents living with a partially broken input device.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The claim, corrected
&lt;/h2&gt;

&lt;p&gt;"A cracked screen is fine — you will not be looking at it" is right, and I stand by it. It is just incomplete. The full version:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A cracked screen is fine once the phone is running. Getting it running needs input, not a display — and in the common case input costs about a dollar and no computer at all.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That distinction matters because of who it affects. The phones most likely to be sitting unused with a smashed screen are exactly the ones being reused as cameras: three-to-six-year-old budget handsets, in households where a screen replacement costs more than the phone is worth. Telling that reader "the screen doesn't matter" and omitting the setup problem sends them away thinking the phone is unusable, when a mouse would have fixed it in five minutes.&lt;/p&gt;

&lt;p&gt;If your phone passes the pointer test, it is a camera. Go and check.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Background Camera RemoteStream records with the screen off, stores video locally on the phone, and serves a live view over your own network to any browser — so once it is set up, the phone's own screen is not part of how you use it. &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt; · &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related reading:&lt;/strong&gt; &lt;a href="https://dev.to/superfunicular/how-to-watch-your-shop-with-an-old-android-phone-no-internet-plan-no-subscription-no-credit-card-1bdl"&gt;How to Watch Your Shop With an Old Android Phone&lt;/a&gt; (where the cracked-screen claim first appeared) · &lt;a href="https://dev.to/superfunicular/monitor-your-dog-while-youre-at-work-for-free-a-step-by-step-pet-cam-guide-for-2026-3f4j"&gt;Monitor Your Dog While You're at Work for Free&lt;/a&gt; · &lt;a href="https://dev.to/superfunicular/why-does-my-android-camera-stop-recording-when-the-screen-turns-off-doze-workmanager-and-the-1a5d"&gt;Why Does My Android Camera Stop Recording When the Screen Turns Off?&lt;/a&gt; · &lt;a href="https://dev.to/superfunicular/how-to-use-an-old-phone-as-a-security-camera-without-a-wi-fi-router-the-hotspot-setup-nobody-1bd5"&gt;How to Use an Old Phone as a Security Camera Without a Wi-Fi Router&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://developer.android.com/develop/connectivity/usb" rel="noopener noreferrer"&gt;USB host and accessory overview&lt;/a&gt; (Android Developers, last updated 2026-02-26) · &lt;a href="https://developer.android.com/about/versions/android-3.1-highlights" rel="noopener noreferrer"&gt;Honeycomb MR1 platform highlights&lt;/a&gt; (Android Developers, last updated 2024-05-20) · &lt;a href="https://github.com/Genymobile/scrcpy/blob/master/README.md" rel="noopener noreferrer"&gt;scrcpy README&lt;/a&gt;, &lt;a href="https://github.com/Genymobile/scrcpy/blob/master/FAQ.md" rel="noopener noreferrer"&gt;FAQ&lt;/a&gt; and &lt;a href="https://github.com/Genymobile/scrcpy/blob/master/doc/otg.md" rel="noopener noreferrer"&gt;OTG documentation&lt;/a&gt; (Genymobile, Apache 2.0)&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>tutorial</category>
      <category>privacy</category>
    </item>
    <item>
      <title>The Camera Phone Is the Most Backup-Eligible Device You Own: What Android Auto Backup Actually Uploads From a "Local-Only" Camera</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sat, 29 Aug 2026 07:09:10 +0000</pubDate>
      <link>https://dev.to/superfunicular/the-camera-phone-is-the-most-backup-eligible-device-you-own-what-android-auto-backup-actually-b79</link>
      <guid>https://dev.to/superfunicular/the-camera-phone-is-the-most-backup-eligible-device-you-own-what-android-auto-backup-actually-b79</guid>
      <description>&lt;p&gt;A phone running as a security camera is supposed to be the boring device in the house. It sits on a shelf, it points at a door, it writes video to its own storage, and nothing leaves the building. That is the whole pitch for the local-only approach, and it is the reason people choose it over a cloud camera.&lt;/p&gt;

&lt;p&gt;Here is the part that took me a while to say out loud, and that I have written imprecisely myself in the past: &lt;strong&gt;the video files are not the only data on that phone, and Android has a documented, on-by-default system for uploading the rest of it to Google Drive.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is called Auto Backup. It is not malware, it is not a dark pattern, and it is not something a camera app switches on. It is a platform service that every app targeting Android 6.0 or higher is enrolled in unless the developer opts out. And once you look at the conditions it requires in order to run, you discover something genuinely uncomfortable: &lt;strong&gt;a phone mounted as a camera satisfies every one of them, every night, more reliably than the phone in your pocket does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a deep-dive into what that system actually copies, what it provably does not, and how to check the state of it on your own camera phone. Everything below is from Google's published documentation, quoted and linked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are my phone security camera recordings backed up to Google Drive?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; Almost certainly not — video files are far too large for the mechanism. Auto Backup gives each app &lt;strong&gt;"up to 25 MB of backup data per app user."&lt;/strong&gt; A single night of recording is orders of magnitude past that. What can be uploaded is the app's &lt;em&gt;settings&lt;/em&gt; data: shared preferences, databases, and internal files. The footage stays where it is. The configuration is the part that travels.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Does a local-only Android security camera app upload anything to the cloud?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; The app may upload nothing at all. Android, separately and underneath it, may still upload the app's stored settings to your Google Drive as part of a device-wide backup you enabled once and forgot. "Local-only" describes what the &lt;em&gt;app&lt;/em&gt; does with your video. It does not describe what the &lt;em&gt;operating system&lt;/em&gt; does with the app's data directory. Those are two different questions, and only the first one is answered by a store listing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The mechanism, in Google's own words
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.android.com/identity/data/autobackup" rel="noopener noreferrer"&gt;Auto Backup documentation&lt;/a&gt; is unusually direct. "Android preserves app data by uploading it to the user's Google Drive, where it's protected by the user's Google Account credentials."&lt;/p&gt;

&lt;p&gt;Enrolment is automatic and the default is on:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Apps that target Android 6.0 (API level 23) or higher automatically participate in Auto Backup... The default value is &lt;code&gt;true&lt;/code&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What gets included by default is broader than most people assume. Google lists shared preferences files, files in internal storage via &lt;code&gt;getFilesDir()&lt;/code&gt; or &lt;code&gt;getDir()&lt;/code&gt;, files under &lt;code&gt;getDatabasePath()&lt;/code&gt; — "which also includes files created with the &lt;code&gt;SQLiteOpenHelper&lt;/code&gt; class" — and, notably, &lt;strong&gt;"files on external storage in the directory returned by &lt;code&gt;getExternalFilesDir(String)&lt;/code&gt;."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That last one matters for camera apps, and I will come back to it.&lt;/p&gt;

&lt;p&gt;Three directories are permanently out of scope: those returned by &lt;code&gt;getCacheDir()&lt;/code&gt;, &lt;code&gt;getCodeCacheDir()&lt;/code&gt;, and &lt;code&gt;getNoBackupFilesDir()&lt;/code&gt;. The docs are emphatic that this is not negotiable — they "are always excluded even if you try to include them."&lt;/p&gt;

&lt;p&gt;Storage behaviour is worth knowing precisely. Backup data lives "in a private folder in the user's Google Drive account, limited to 25 MB per app," it "does not count toward the user's personal Google Drive quota," and &lt;strong&gt;"only the most recent backup is stored. When a backup is made, any previous backup is deleted."&lt;/strong&gt; Google also states the data "can't be read by the user or other apps on the device" — which means you cannot open it up and inspect what your camera app put there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a mounted camera is the ideal backup candidate
&lt;/h2&gt;

&lt;p&gt;This is the observation that made me want to write the piece. Auto Backup does not run whenever it likes. It runs when four conditions are all true:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The user has enabled backup on the device... At least 24 hours have elapsed since the last backup. The device is idle. The device is connected to a Wi-Fi network (if the device user hasn't opted in to mobile-data backups)."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now read that list as a description of a phone screwed to a wall pointing at a hallway.&lt;/p&gt;

&lt;p&gt;It is on Wi-Fi permanently, because a LAN camera is useless otherwise. It is plugged in permanently. And it is &lt;strong&gt;idle&lt;/strong&gt; in the system's sense — nobody picks it up, nobody scrolls on it, nobody has touched the screen since the day it was mounted. It is arguably the most consistently idle, most consistently connected device in the building.&lt;/p&gt;

&lt;p&gt;Google's own caveat underlines the contrast: "In practice, these conditions occur roughly every night, but a device might never back up (for example, if it never connects to a network)." A phone that lives in a pocket, drops off Wi-Fi, and gets handled all evening is the one that might go days without qualifying. The camera phone qualifies nightly, without fail.&lt;/p&gt;

&lt;p&gt;There is one brake: "To conserve network bandwidth, the upload takes place only if the app data has changed." A camera app whose settings are stable has little to send. But "the app data" includes anything the app writes into a backed-up directory — and a recorder is, by nature, an app that writes things continuously.&lt;/p&gt;

&lt;h2&gt;
  
  
  The lock screen is doing more work than you think
&lt;/h2&gt;

&lt;p&gt;Here is the second inversion, and it is a security one.&lt;/p&gt;

&lt;p&gt;Google's &lt;a href="https://developer.android.com/privacy-and-security/risks/backup-best-practices" rel="noopener noreferrer"&gt;backup security recommendations&lt;/a&gt; draw a line that is easy to skim past:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The Standard Android Backup system always encrypts backup data in transit and at rest. This encryption is applied regardless of the Android version in use and of whether your device has a lock screen. Starting from Android 9, if the device has a lock screen set, then the backup data is not only encrypted, but encrypted with a key not known to Google (the lock screen secret protects the encryption key, thus enabling end-to-end encryption)."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read it twice. Encryption is unconditional. &lt;strong&gt;End-to-end encryption is conditional on a lock screen.&lt;/strong&gt; The Auto Backup page says the same thing from the other side: the backup "is end-to-end encrypted on devices running Android 9 or higher using the device's PIN, pattern, or password."&lt;/p&gt;

&lt;p&gt;Now consider what people actually do to a phone they are turning into a camera. They remove the PIN. It is the rational thing to do: you want to glance at the screen without unlocking, you want it to come back cleanly after a power cut without a human standing there to type a code, and the device is bolted somewhere only you go.&lt;/p&gt;

&lt;p&gt;That decision is a reasonable convenience trade-off, and almost nobody making it knows it is &lt;em&gt;also&lt;/em&gt; a decision about who holds the key to their cloud backup. The device most likely to have no lock screen is the device best positioned to back up every night. The two choices compound, silently, in opposite directions.&lt;/p&gt;

&lt;p&gt;If you keep a lock screen on the camera phone, this whole section is moot and your backup is end-to-end encrypted. That is the fix, and it costs nothing but convenience. It pairs naturally with the &lt;a href="https://dev.to/superfunicular/lock-everything-except-the-camera-an-android-private-space-walkthrough-for-a-phone-mounted-in-a-4glm"&gt;Private Space walkthrough&lt;/a&gt; we published for phones mounted in shared rooms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quota trap nobody warns you about
&lt;/h2&gt;

&lt;p&gt;Return to &lt;code&gt;getExternalFilesDir(String)&lt;/code&gt; being backed up by default.&lt;/p&gt;

&lt;p&gt;Suppose a camera app stores clips in its app-specific external directory rather than in shared media storage. Those files are, by default, in scope for backup. They are also wildly over the limit. Google documents the consequence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If the amount of data is over 25 MB, the system calls &lt;code&gt;onQuotaExceeded()&lt;/code&gt; and doesn't back up data to the cloud. The system periodically checks whether the amount of data later falls under the 25 MB threshold and continues Auto Backup when it does."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So the failure is not "your video gets uploaded." The failure is that &lt;strong&gt;the backup silently stops happening at all.&lt;/strong&gt; Your settings, your camera configuration, the thing you would actually want restored on a new phone — none of it is saved, because the recordings crowded it out. And there is no user-visible signal either way.&lt;/p&gt;

&lt;p&gt;Both outcomes here are invisible. That is the honest summary of this entire subject: whichever way it goes, nothing on screen tells you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning it off is less binary than it sounds
&lt;/h2&gt;

&lt;p&gt;The obvious response is &lt;code&gt;android:allowBackup="false"&lt;/code&gt;. It works, with a caveat that Google flags specifically for modern apps:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"For apps targeting Android 12 (API level 31) or higher, this behavior varies. On devices from some device manufacturers, specifying &lt;code&gt;android:allowBackup="false"&lt;/code&gt; disables cloud-based backup and restore... but doesn't disable device-to-device transfers for the app."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cloud off does not mean data still. Device-to-device migration — the flow you use when you set up a new phone from an old one — is governed separately, through &lt;code&gt;dataExtractionRules&lt;/code&gt; on Android 12+ (and &lt;code&gt;fullBackupContent&lt;/code&gt; on Android 11 and lower; an app supporting both needs &lt;em&gt;both&lt;/em&gt; files). And the default when you say nothing is permissive:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If there are no rules for a particular backup mode, such as if the &lt;code&gt;&amp;lt;device-transfer&amp;gt;&lt;/code&gt; section is missing, that mode is fully enabled for all content except for &lt;code&gt;no-backup&lt;/code&gt; and &lt;code&gt;cache&lt;/code&gt; directories."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is also a flag built precisely for the lock-screen problem above: &lt;code&gt;disableIfNoEncryptionCapabilities&lt;/code&gt;, which makes "the backup happen only if it can be encrypted, such as when the user has a lock screen." It is the correct setting for anything sensitive, and it is opt-in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the documentation does not tell you
&lt;/h2&gt;

&lt;p&gt;Six gaps I could not close from the published pages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No inventory.&lt;/strong&gt; Because backup data "can't be read by the user or other apps," there is no supported way to see &lt;em&gt;which&lt;/em&gt; files a given app actually uploaded. You can see that an app was backed up, not what was in it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No retention number.&lt;/strong&gt; Obsolete backup datasets are "automatically deleted after a period of inactivity." The period is never specified.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No quota signal to the user.&lt;/strong&gt; &lt;code&gt;onQuotaExceeded()&lt;/code&gt; is delivered to the app. Nothing surfaces to the person relying on the backup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The OEM set is unnamed.&lt;/strong&gt; "Some device manufacturers" ignore &lt;code&gt;allowBackup="false"&lt;/code&gt; for D2D. Which ones is not published, which matters most on the budget devices this use case runs on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Idle" is undefined here.&lt;/strong&gt; The scheduling section gives no threshold for what counts as an idle device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Page staleness.&lt;/strong&gt; The Auto Backup page carries &lt;code&gt;Last updated 2026-02-26&lt;/code&gt;; the backup security page carries &lt;code&gt;Last updated 2024-10-25&lt;/code&gt;. The two are not versioned together.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  How to check your own camera phone
&lt;/h2&gt;

&lt;p&gt;Nothing here requires a developer. Five minutes, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Settings → Google → Backup.&lt;/strong&gt; See whether device backup is on at all. If it is off, none of this applies to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the account.&lt;/strong&gt; Whichever Google account is signed in is the destination. On a repurposed phone that is often somebody's old personal account, still there because nobody made a decision. Our piece on &lt;a href="https://dev.to/superfunicular/your-camera-phone-is-still-signed-in-notifications-secondary-users-private-space-and-why-af"&gt;what stays signed in on a camera phone&lt;/a&gt; covers the wider version of this problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a lock screen.&lt;/strong&gt; This is the single highest-value action on the list. It is the difference between encrypted and end-to-end encrypted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look at the backed-up app list in the Google One / Drive backup view.&lt;/strong&gt; It will not show you contents, but it will show you participation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide deliberately.&lt;/strong&gt; Backup on with a lock screen is a defensible setup. Backup off is a defensible setup. Backup on with no lock screen, unexamined, is the one nobody chose on purpose.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Correcting something we wrote
&lt;/h2&gt;

&lt;p&gt;In an earlier article on &lt;a href="https://dev.to/superfunicular/the-most-privacy-respecting-way-to-use-an-old-android-phone-as-a-home-security-camera-a-1k15"&gt;the most privacy-respecting way to run an old phone as a camera&lt;/a&gt;, we wrote of the recordings: "There is no copy on a server. There is no copy in a backup."&lt;/p&gt;

&lt;p&gt;For the video files, that holds, and the 25 MB quota is the reason it holds. But the sentence was doing more work than it should have. App &lt;em&gt;data&lt;/em&gt; is a different object from app &lt;em&gt;recordings&lt;/em&gt;, and Android's backup system treats them differently. The precise claim is: your footage stays on the device; your app's configuration may not, depending on a system setting that has nothing to do with the camera app. We should have drawn that line the first time.&lt;/p&gt;

&lt;p&gt;This is the same distinction as our &lt;a href="https://dev.to/superfunicular/local-only-is-not-the-same-as-private-the-lan-threat-model-for-a-phone-as-camera-server-4jpi"&gt;LAN threat model piece&lt;/a&gt;: local-only is a statement about a data path, not a blanket privacy guarantee. Every architecture has edges. The useful thing is to name them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leaves the local-only case
&lt;/h2&gt;

&lt;p&gt;Stronger, not weaker — but only when stated accurately.&lt;/p&gt;

&lt;p&gt;A cloud camera uploads your video by design. That is the product. No setting removes it, because removing it removes the feature. What we are discussing here is an &lt;em&gt;optional, user-controlled, encrypted, 25 MB&lt;/em&gt; copy of configuration data, which you can inspect the setting for in under a minute and turn off with one toggle. Those are not the same class of exposure, and pretending they are would be as sloppy as ignoring the issue.&lt;/p&gt;

&lt;p&gt;The difference that matters is that this one is yours to decide. The video from a phone-as-camera setup is written to the phone and served from the phone. &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt; records with the screen off and serves the live view from a web server running on the device itself, over your own network — there is no upload path in the architecture for the footage to take. What Android does with an app's settings directory is a platform decision, and now you know where the switch is.&lt;/p&gt;

&lt;p&gt;That is the honest version. It is a better argument than the tidy one.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Background Camera RemoteStream turns an Android phone into a screen-off camera with local recording and a built-in web server for remote viewing on your own network. &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt; · &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://developer.android.com/identity/data/autobackup" rel="noopener noreferrer"&gt;Back up user data with Auto Backup&lt;/a&gt; (Android Developers, last updated 2026-02-26) · &lt;a href="https://developer.android.com/privacy-and-security/risks/backup-best-practices" rel="noopener noreferrer"&gt;Security recommendations for backups&lt;/a&gt; (Android Developers, last updated 2024-10-25)&lt;/p&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>security</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Best Free Security Camera Apps for Android in 2026 - and Which Ones Quietly Meter Your Free Plan</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sat, 29 Aug 2026 02:45:49 +0000</pubDate>
      <link>https://dev.to/superfunicular/best-free-security-camera-apps-for-android-in-2026-and-which-ones-quietly-meter-your-free-plan-4jae</link>
      <guid>https://dev.to/superfunicular/best-free-security-camera-apps-for-android-in-2026-and-which-ones-quietly-meter-your-free-plan-4jae</guid>
      <description>&lt;p&gt;Every list of free security camera apps compares the same things: motion detection, night mode, two-way audio, cloud storage days. Almost none of them compare the thing that actually decides whether "free" stays free.&lt;/p&gt;

&lt;p&gt;Here it is: &lt;strong&gt;does your video pass through the vendor's server on its way to your eyes?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If it does, someone is paying for that bandwidth, and it is not you. That cost has to be recovered, so the free plan gets a meter on it — a daily data allowance, a bitrate ceiling, a resolution cap, a camera count. If your video does &lt;em&gt;not&lt;/em&gt; pass through anyone's server — if the phone talks straight to your laptop over your own Wi-Fi — there is no bandwidth bill, so there is nothing to meter. The free tier has no ceiling because a ceiling would be pointless.&lt;/p&gt;

&lt;p&gt;That single architectural fork explains nearly every "why is my free plan like this?" complaint in the category. This guide sorts the 2026 field by it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which free Android security camera app has no data limit?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Background Camera RemoteStream.&lt;/strong&gt; It has no data cap on its free use because it does not relay your video through a server. The app runs a small web server on the phone itself, and your browser connects to that phone directly over your local network. There is no middleman hop to meter, so there is no allowance to run out, no bitrate ceiling imposed by a plan tier, and no account to create.&lt;/p&gt;

&lt;p&gt;Recording is separate and also uncapped: video is written to the phone's own storage, with the screen off, limited only by the free space on the device.&lt;/p&gt;

&lt;p&gt;The rest of this guide covers the other apps worth knowing and exactly where each one's meter sits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026 field at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;App&lt;/th&gt;
&lt;th&gt;Free plan meter&lt;/th&gt;
&lt;th&gt;Account required&lt;/th&gt;
&lt;th&gt;Video path&lt;/th&gt;
&lt;th&gt;Play Store&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Background Camera RemoteStream&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;None — no relay to meter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Phone → your browser, direct on LAN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IP Webcam&lt;/td&gt;
&lt;td&gt;None on LAN; password gated to paid tier&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Phone → your browser, direct on LAN&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LineCast&lt;/td&gt;
&lt;td&gt;300 MB per 24h; 1 Mbps; 720p&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Relayed through vendor servers&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AlfredCamera&lt;/td&gt;
&lt;td&gt;2 cameras; SD resolution&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Relayed / vendor infrastructure&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AtHome Camera&lt;/td&gt;
&lt;td&gt;Recorded clips gated to paid cloud&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;P2P with relay-assisted fallback&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FadCam&lt;/td&gt;
&lt;td&gt;None (open source)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Local network streaming&lt;/td&gt;
&lt;td&gt;No — sideload / F-Droid&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Why free plans get metered: the part nobody writes down
&lt;/h2&gt;

&lt;p&gt;When an app advertises "watch your camera from anywhere," it is almost always describing this path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phone camera  →  vendor's server  →  your phone/browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That middle hop exists for a good engineering reason. Your home router does not accept unsolicited inbound connections, so an app that wants to reach the camera from the outside world has to meet you somewhere neutral. The vendor rents that neutral ground, and pays per gigabyte for it.&lt;/p&gt;

&lt;p&gt;Video is the worst possible thing to pay per gigabyte for. A single 1 Mbps stream running continuously is roughly 10 GB a day. Multiply that by a free user base and the free tier becomes the company's largest line item. So the free tier gets a governor: a daily megabyte allowance, a hard bitrate limit, a downgrade to standard definition, a cap on how many cameras can be online at once.&lt;/p&gt;

&lt;p&gt;The alternative path has no middle hop at all:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;phone camera  →  your Wi-Fi router  →  your browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nobody rents that. Your router already moves the packets. An app built this way has no per-gigabyte cost to recover from you, which is why its free tier tends to have no allowance attached — and why it keeps working when your internet connection is down, since the traffic never needed to leave the building. If you have ever wondered &lt;a href="https://dev.to/superfunicular/whats-the-cheapest-way-to-set-up-a-home-security-camera-without-a-subscription-in-2026-4i28"&gt;why the cheapest home security setup is usually the one with no subscription attached&lt;/a&gt;, this is the mechanism underneath it.&lt;/p&gt;

&lt;p&gt;Keep the diagram in mind and every free plan in the category becomes predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Background Camera RemoteStream — best free security camera app with no data cap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: none. Account: none. Cost: free.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is our app, so treat the review as informed rather than neutral — but the claims below are all checkable by installing it, and the architecture is the reason it belongs at the top of a list sorted by metering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it does.&lt;/strong&gt; It turns an Android phone into a security camera that records with the screen completely off, and serves a live view to any browser on the same network from a web server running inside the app itself. Point a laptop at the phone's local address and the picture is there. No sign-up, no cloud account, no plan tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why there is nothing to meter.&lt;/strong&gt; The video never leaves your network on the live-view path. The phone is the server; your browser is the client; your router is the only thing in between. There is no vendor bandwidth bill, so there is no allowance, no 1 Mbps governor, and no SD downgrade waiting at a plan boundary. This also means the live view keeps working during an internet outage — the camera and the viewer are both inside the house, and the outage is outside it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recording with the screen off.&lt;/strong&gt; This is the part most phone-camera apps get wrong, because Android is actively trying to stop it. Modern Android aggressively suspends work when the screen goes dark, and a camera session is exactly the kind of expensive thing it wants to kill. The app holds a properly typed foreground service for camera use, which is the supported way to tell the system this work must continue. Footage is written to the phone's own storage — not uploaded anywhere — so the only limit is free space on the device. The full explanation of what Android does to a backgrounded camera and how to survive it is in our &lt;a href="https://dev.to/superfunicular/how-to-keep-the-camera-running-with-the-screen-off-on-android-396m"&gt;screen-off recording deep-dive&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy posture.&lt;/strong&gt; Storage is local-only. There is no account, so there is no account database with your video associated to your name, and no vendor-side copy that can be breached, subpoenaed, or repriced. "No cloud" is now table stakes marketing across this category, so the useful question is sharper: does anything sit between the camera and the screen? Here, on the LAN path, nothing does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watching from outside the house.&lt;/strong&gt; Be clear about this, because it is where the honest limits of a LAN-first design live. Direct browser viewing is a local-network feature — away from home, you are not on that network. The app's answer is YouTube Live: it can stream directly to your channel, which you can then watch from anywhere, on an unlisted stream if you want it private. That path does traverse the internet, so it uses your data connection like any upload would; the difference is that it is &lt;em&gt;your&lt;/em&gt; YouTube channel and &lt;em&gt;your&lt;/em&gt; choice, not a vendor relay with a 300 MB allowance attached.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; anyone who wants a camera with no subscription, no account, and no cap; older or budget Android phones; households on metered mobile data, where a relayed app would burn the data plan just by being watched; shops and storefronts monitored from the counter; setups with unreliable or no home internet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weak spots:&lt;/strong&gt; remote viewing means going through YouTube Live rather than a direct connection; there is no motion-triggered alert push and no two-way audio; and getting the local address right takes one minute of reading the first time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get it:&lt;/strong&gt; &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt; · &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. IP Webcam — the other genuinely unmetered option
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: none on the LAN path. Account: none.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The long-running standard for turning an Android phone into a network camera, and architecturally a cousin of ours: it streams inside your Wi-Fi network without needing internet access, and you view it in a browser or in VLC. No account is needed for the basic function, and because the stream is local there is no data allowance to exhaust.&lt;/p&gt;

&lt;p&gt;It is deep on features — recording in several container formats, audio streaming, motion detection with a sound trigger, uploads to Dropbox/FTP/SFTP/email via a plugin, multiple web renderers. If you like configuring things, you will like it.&lt;/p&gt;

&lt;p&gt;The catch worth knowing before you rely on it: &lt;strong&gt;requiring a password on the stream is a premium feature.&lt;/strong&gt; On a free install, anyone already on your Wi-Fi who finds the address can look through the camera. On a trusted home network that may be acceptable; on shared, office, or dormitory Wi-Fi it is a real exposure. The paid tier also unlocks Tasker integration and interface customization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; tinkerers, VLC users, people who want format and upload options.&lt;br&gt;
&lt;strong&gt;Weak spots:&lt;/strong&gt; stream password is paywalled; the interface is utilitarian; no YouTube Live path.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. LineCast — the clearest example of a metered free plan
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: 300 MB per 24 hours, 1 Mbps, 720p. Account: yes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LineCast is a well-built Android CCTV app and is worth taking seriously — it offers screen-off operation and live remote viewing from any web-connected device, which is a genuinely strong combination, and it runs no ads even on the free plan, with no time limit on free use.&lt;/p&gt;

&lt;p&gt;It is also the cleanest illustration of this article's thesis, because the company documents the mechanism openly. Its FAQ describes transmitting video and audio from the camera device to viewers — that is, through its infrastructure — and the free plan is metered accordingly: &lt;strong&gt;the camera can send up to 300 MB of data per 24 hours&lt;/strong&gt;, which the company itself estimates at roughly half an hour of footage. Free video quality tops out at 720 vertical pixels and a maximum bitrate of 1 Mbps.&lt;/p&gt;

&lt;p&gt;None of that is a criticism of their engineering. It is the honest arithmetic of relaying video for free users, and they publish it plainly rather than burying it. But if your use case is "watch the shop all afternoon," half an hour a day is the binding constraint, and no setting will move it — only a paid plan will.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; people who want remote viewing to just work with zero network setup and are fine with short daily sessions or paying.&lt;br&gt;
&lt;strong&gt;Weak spots:&lt;/strong&gt; 300 MB/24h ceiling; 1 Mbps and 720p on free; account required.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. AlfredCamera — the biggest name, and the 2026 price move
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: 2 cameras, standard definition. Account: yes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alfred is the category's most recognizable phone-as-camera app, with the most polished onboarding and the largest support footprint. If you want something your family can install without a phone call, it is the safe pick.&lt;/p&gt;

&lt;p&gt;Its 2026 plan changes are a useful data point for anyone budgeting. The company announced that the &lt;strong&gt;free tier is limited to up to 2 online cameras&lt;/strong&gt;, and that the annual price of new Premium Standard subscriptions rises roughly 20% in the United States, &lt;strong&gt;from $29.99 to $35.99 per year&lt;/strong&gt;, with monthly options at $2.99 and $5.99, rolling out through 2026 and effective in the US from 16 March 2026. Premium Standard raises the limit to 4 online cameras; Premium Plus offers unlimited cameras and adds Full HD, 30-day cloud storage and continuous recording. Free video quality is standard definition.&lt;/p&gt;

&lt;p&gt;Read that as the relay economics again: the free tier is bounded in the two dimensions that cost the vendor money — how many streams are live, and how many pixels each one carries. We wrote a longer version of this arithmetic when &lt;a href="https://dev.to/superfunicular/can-i-replace-my-wyze-cam-with-an-old-android-phone-in-2026-what-that-2999-renewal-is-really-5gdb"&gt;pricing an old phone against a Wyze renewal&lt;/a&gt;, and the shape is identical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; non-technical households; people who want alerts and support and will pay for them.&lt;br&gt;
&lt;strong&gt;Weak spots:&lt;/strong&gt; SD on free; 2-camera free ceiling; price rising; account and cloud required.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. AtHome Camera — free to watch, paid to keep
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: recorded clips are gated. Account: yes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AtHome is free to download and gives you the core set at no cost — live streaming, motion detection, two-way audio. Its connection design is P2P with relay-assisted fallback: it attempts a direct device-to-device link and falls back to a relay server when networks block that, which is a sensible hybrid.&lt;/p&gt;

&lt;p&gt;The meter sits on retention rather than bandwidth: you generally cannot download the scheduled or motion-triggered clips it captures unless you subscribe to the cloud service. So the live picture is free and the &lt;em&gt;evidence&lt;/em&gt; is not — which matters, because the reason most people install a security camera is to still have the footage tomorrow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; multi-platform households wanting two-way audio; people who mainly watch live.&lt;br&gt;
&lt;strong&gt;Weak spots:&lt;/strong&gt; saved footage effectively paywalled; account required; free limits vary by region and platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. FadCam — excellent, open source, and not on Google Play
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meter: none. Account: none. Play Store: no.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FadCam deserves a mention on merit: it is an open-source, ad-free Android recorder that started as a background video recorder and has grown to cover dashcam-style recording, screen recording, live streaming over local networks, and remote camera control. It is actively maintained and, being open source, is fully auditable — genuinely rare in this category and a real advantage if you care about verifying rather than trusting privacy claims.&lt;/p&gt;

&lt;p&gt;The practical obstacle is distribution. &lt;strong&gt;It is not installable from Google Play&lt;/strong&gt;; the developer distributes it through GitHub releases, F-Droid, and mirrors like SourceForge. Its developer told us as much directly in the comments on one of our earlier dev.to posts. For a technical audience, sideloading or adding F-Droid is a minor step. For the person setting up a camera for a relative in another city, "download an APK from GitHub" is where the project ends — and on many budget devices in markets where sideloading is discouraged or restricted by the vendor, it is a genuine wall.&lt;/p&gt;

&lt;p&gt;We mention it because a fair comparison should include the best tool in the category regardless of where it ships, and because if you are comfortable sideloading, it is very good.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good for:&lt;/strong&gt; open-source purists, auditors, technically confident users.&lt;br&gt;
&lt;strong&gt;Weak spots:&lt;/strong&gt; no Play install; setup friction for non-technical users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three ways to tell whether an app is metering you
&lt;/h2&gt;

&lt;p&gt;Before you commit a phone to a corner of a room, run these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Look for a number in the free-plan description.&lt;/strong&gt; Megabytes per day, kilobits per second, a pixel ceiling, a camera count. Vendors who relay video almost always publish the allowance, because support tickets are worse than disclosure. A free plan described only in features, with no numbers, usually means the numbers are somewhere less prominent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Turn the internet off and try to watch.&lt;/strong&gt; Disconnect your router from the internet but leave Wi-Fi running, then open the live view from a laptop on the same network. A direct-connection app keeps showing the picture. A relayed app goes dark, because the path out to the vendor and back is broken. This is the fastest, most honest test in the category, and it takes thirty seconds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ask where the recording lands.&lt;/strong&gt; If the footage is on the phone, the limit is your storage. If it is in the vendor's cloud, the limit is your plan — and the retention window is the number to check, since a camera whose footage expires before you look at it has not really recorded anything.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  If your data is metered, this is not a small difference
&lt;/h2&gt;

&lt;p&gt;Most English-language comparisons in this category assume unlimited home broadband, where a 300 MB relay allowance reads as an annoyance rather than a blocker. On a metered mobile data plan — the normal case across much of the world, and for most of the people who install our app — the picture inverts completely.&lt;/p&gt;

&lt;p&gt;A relayed camera spends your data twice: the phone uploads the stream, and you download it again to watch. Watch it for an hour and you have paid for that hour twice over, out of a bundle you bought for the month. A direct LAN connection spends none of it, because the packets never touch your data plan at all; they go phone → router → laptop and stop. Two people can watch all day and the bundle does not move.&lt;/p&gt;

&lt;p&gt;That is also why the "turn the internet off" test above is not a party trick. If your connection drops for an afternoon — or you simply have not topped up yet — a locally served camera keeps working and a relayed one does not. We wrote a full walkthrough of that setup for &lt;a href="https://dev.to/superfunicular/best-free-no-subscription-apps-to-turn-an-old-android-phone-into-a-local-only-security-camera-4582"&gt;running a camera with no internet plan and no credit card&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;p&gt;If you want a free Android security camera and you do not want to discover a ceiling later:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No cap, no account, installs from Play → Background Camera RemoteStream.&lt;/strong&gt; Screen-off recording to local storage, direct browser viewing on your network, YouTube Live when you need to watch from elsewhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No cap and you want maximum configurability → IP Webcam&lt;/strong&gt;, provided you accept that stream passwords are a paid feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You want zero network setup and will pay or watch briefly → LineCast&lt;/strong&gt; (300 MB/24h free) &lt;strong&gt;or AlfredCamera&lt;/strong&gt; (2 cameras, SD free).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You are comfortable sideloading and want auditable code → FadCam.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The general rule holds beyond these six: &lt;strong&gt;the free tier is metered exactly where the vendor's costs are.&lt;/strong&gt; Find the hop, and you have found the cap.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Background Camera RemoteStream records with the screen off, stores video locally on the device, serves a live view from a web server running inside the app, and can stream to YouTube Live — with no account and no cloud.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt; · &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>security</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Ring's "Throw Away the Key" Encryption Is a Custody Change, Not a Cryptography One</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Sat, 29 Aug 2026 02:45:16 +0000</pubDate>
      <link>https://dev.to/superfunicular/rings-throw-away-the-key-encryption-is-a-custody-change-not-a-cryptography-one-i1f</link>
      <guid>https://dev.to/superfunicular/rings-throw-away-the-key-encryption-is-a-custody-change-not-a-cryptography-one-i1f</guid>
      <description>&lt;p&gt;On 26 August 2026, Amazon's Ring &lt;a href="https://www.aboutamazon.com/news/devices/ring-take-encryption" rel="noopener noreferrer"&gt;announced TAKE — Throw Away the Key Encryption&lt;/a&gt; — which the company says "will become the default encryption for all Ring customers worldwide when fully rolled out." It rolls out in phases starting in September — days away as I write this. &lt;a href="https://techcrunch.com/2026/08/26/ring-introduces-a-new-encryption-standard-makes-it-the-default-for-cloud-features/" rel="noopener noreferrer"&gt;TechCrunch reported the same day&lt;/a&gt; that the scheme uses rotating keys held temporarily in the cloud, released to Ring only to power features the user has enabled, and deleted afterward — within 24 hours, per TechCrunch's account. End-to-end encryption remains available as an opt-in setting.&lt;/p&gt;

&lt;p&gt;Let me say the fair thing first, because it's true and it matters: this is a real improvement, and Ring deserves credit for it.&lt;/p&gt;

&lt;p&gt;Default beats opt-in. Almost nobody changes defaults, so a privacy control that ships off is a privacy control most people never get. Ring's own blog notes E2EE has been available since 2021 — five years of an option that, by construction, protected only the users who went looking for it. Making the stronger setting the default is the single highest-leverage privacy change a consumer product can make. They also built on &lt;a href="https://datatracker.ietf.org/doc/rfc9420/" rel="noopener noreferrer"&gt;Messaging Layer Security&lt;/a&gt;, a published IETF standard rather than a proprietary scheme, and shipped a white paper describing it. That is how you want a vendor to behave.&lt;/p&gt;

&lt;p&gt;So this isn't a "gotcha" post. It's a post about what the announcement actually changes, and what it structurally can't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The question was never "is it encrypted"
&lt;/h2&gt;

&lt;p&gt;Your Ring video was already encrypted. Ring says so plainly: "Your Ring videos are already encrypted when they travel to the cloud and while they are stored at rest." Transport encryption and encryption-at-rest have been table stakes in this category for years.&lt;/p&gt;

&lt;p&gt;What TAKE changes is &lt;strong&gt;key custody&lt;/strong&gt; — who holds a copy of the key that undoes the encryption, and for how long.&lt;/p&gt;

&lt;p&gt;Here's Ring's own description of the mechanism:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"A copy of the keys is temporarily held inside a secure enclave within the cloud; think of it as a sealed vault that can only provide Ring access to the key under strict, limited conditions. Ring can only receive access to power the intelligent features that you have active on your account, and then throws away and deletes the keys."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read that clause again: &lt;em&gt;to power the intelligent features that you have active on your account.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That sentence is the whole architecture. &lt;strong&gt;Your key-exposure surface is exactly proportional to how many cloud features you leave switched on.&lt;/strong&gt; Smart Alerts needs to see the frame to tell a person from a parcel. Video search needs to see the frame to index it. Every cloud-side capability is, definitionally, a moment where something other than your device has plaintext.&lt;/p&gt;

&lt;p&gt;Ring is not hiding this. Their E2EE section states the tradeoff outright: with end-to-end encryption enabled, "Shared Users and cloud-based features are not available." That's an honest disclosure, and it's the same tradeoff every cloud camera makes.&lt;/p&gt;

&lt;p&gt;What TAKE genuinely innovates is making that tradeoff &lt;strong&gt;continuous instead of binary&lt;/strong&gt;. Before, you chose all-cloud or all-private. Now you choose a dosage. That's useful. It's also a different thing from removing the tradeoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  The handyman analogy is more revealing than it looks
&lt;/h2&gt;

&lt;p&gt;Ring reaches for a lovely metaphor:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You might give a spare to a close friend or family member you trust completely. And if a handyman needs to fix your sink, you lend them a key only for as long as the job takes, then get it back."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a good analogy — and notice what it concedes. In the metaphor, the handyman really does hold your key. The safety comes from &lt;em&gt;duration&lt;/em&gt; and &lt;em&gt;intent&lt;/em&gt;, not from &lt;em&gt;impossibility&lt;/em&gt;. You are trusting that the key comes back, that nobody copied it while it was out, and that the job was what you were told it was.&lt;/p&gt;

&lt;p&gt;That's not a knock on Ring specifically. It's the honest description of what any recoverable, feature-serving key architecture buys you. The second tell is the recovery story: TechCrunch reports that if you lose your devices, you can recover your keys by standing near your Ring cameras, or via "a passphrase, cloud-based backups, another approved device, or passkeys." A key that can be recovered from cloud backup is a key the cloud can, under some conditions, reconstitute. Every consumer product makes some version of this compromise, because the alternative — lose your phone, lose your footage forever — is a support nightmare that most users would hate.&lt;/p&gt;

&lt;p&gt;So the honest framing is: &lt;strong&gt;TAKE narrows the window. It does not remove the window.&lt;/strong&gt; And "how wide is the window" is a fundamentally different security property from "there is no window."&lt;/p&gt;

&lt;h2&gt;
  
  
  Where we sit, and why it's a different question rather than a better answer
&lt;/h2&gt;

&lt;p&gt;I build &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt;, an Android app that turns a phone into a camera that records with the screen off and streams to a device you already own.&lt;/p&gt;

&lt;p&gt;The architecture is deliberately dumber. Footage is stored locally on the device. Live viewing runs over your own network. YouTube Live streaming, if you use it, goes to &lt;em&gt;your&lt;/em&gt; channel with &lt;em&gt;your&lt;/em&gt; stream key. There is no account to create, because there is no server holding anything that would need one.&lt;/p&gt;

&lt;p&gt;I want to be precise about what that does and doesn't buy you, because overclaiming here would be exactly the sin I'm describing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it buys:&lt;/strong&gt; there is no vendor-held key, because there is no vendor-side copy of your video for a key to protect. The question "how long does Super Funicular hold a copy of your key?" has no denominator. Not "24 hours" — undefined. You cannot leak what you never received, and you cannot be compelled to hand over what you don't have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it costs, honestly:&lt;/strong&gt; no cloud-side smart alerts. No server-side video search across months of footage. No frictionless sharing link you can text to a neighbour. If your phone dies with local-only footage on it and no backup, that footage is gone — the same brutal tradeoff Ring's E2EE mode carries, which is precisely why they made it opt-in. Cloud features are genuinely useful, and pretending otherwise is marketing, not engineering.&lt;/p&gt;

&lt;p&gt;The point isn't that local-first is universally better. It's that these are &lt;strong&gt;different questions&lt;/strong&gt;. Ring is optimising &lt;em&gt;how briefly a third party holds your key&lt;/em&gt;. A local-first tool removes the third party from the diagram entirely, and pays for that in features. Which one you want depends honestly on whether you'd rather have package detection or an architecture with nothing in the middle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway for anyone evaluating a camera
&lt;/h2&gt;

&lt;p&gt;When a vendor announces an encryption upgrade, three questions cut through the marketing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Who can decrypt this, and under what conditions?&lt;/strong&gt; "Encrypted" alone answers nothing — encrypted &lt;em&gt;to whom&lt;/em&gt; is the whole question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which features require plaintext?&lt;/strong&gt; That list is your exposure surface. If it grows, so does the surface, regardless of the encryption scheme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What happens if I lose every device?&lt;/strong&gt; If the answer is "you can recover," some recoverable path exists, and that path is part of your threat model.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ring answered all three publicly and in specific terms, which is more than most of this industry does. Ask their competitors the same three questions and see how many can answer as clearly.&lt;/p&gt;

&lt;p&gt;Two of those questions have bitten this category recently in ways worth reading about. On question one, &lt;a href="https://dev.to/superfunicular/operation-cameraswarm-reached-cameras-behind-nat-by-serial-number-alone-the-access-path-nobody-557b"&gt;Operation CameraSwarm reached Dahua cameras behind NAT by serial number alone&lt;/a&gt; — an inbound path nobody configured and nobody could see, which is what "under what conditions" looks like when the conditions are undocumented. On the broader dependency question, &lt;a href="https://dev.to/superfunicular/google-home-and-nest-went-dark-worldwide-last-night-and-the-telling-detail-is-that-a-factory-18k2"&gt;Google Home and Nest went dark worldwide&lt;/a&gt; and a factory reset wouldn't have helped, because the broken half wasn't the half you own. And on the duration half of custody specifically, &lt;a href="https://dev.to/superfunicular/flock-cut-default-camera-data-retention-from-30-days-to-7-and-its-own-numbers-say-the-other-23-4efm"&gt;Flock cutting default retention from 30 days to 7&lt;/a&gt; is the same insight TAKE is built on: how long something is held is a security control in its own right.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt; — local-first background camera and YouTube Live streaming for Android. No cloud storage, no account required. More at &lt;a href="https://superfunicular.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sources:&lt;/strong&gt; &lt;a href="https://www.aboutamazon.com/news/devices/ring-take-encryption" rel="noopener noreferrer"&gt;Amazon — Ring introduces TAKE (26 Aug 2026)&lt;/a&gt; · &lt;a href="https://techcrunch.com/2026/08/26/ring-introduces-a-new-encryption-standard-makes-it-the-default-for-cloud-features/" rel="noopener noreferrer"&gt;TechCrunch — Ring introduces a new encryption standard (26 Aug 2026)&lt;/a&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>android</category>
      <category>security</category>
      <category>encryption</category>
    </item>
    <item>
      <title>Live View Stopped, Recording Did Not: Three Reasons an Old-Phone Security Camera Loses Its Stream on Patchy Internet</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Thu, 27 Aug 2026 07:10:25 +0000</pubDate>
      <link>https://dev.to/superfunicular/live-view-stopped-recording-did-not-three-reasons-an-old-phone-security-camera-loses-its-stream-3i35</link>
      <guid>https://dev.to/superfunicular/live-view-stopped-recording-did-not-three-reasons-an-old-phone-security-camera-loses-its-stream-3i35</guid>
      <description>&lt;p&gt;You set an old Android phone up as a security camera. It worked. Then one afternoon you open the viewer on your other phone and the picture is frozen, or the page will not load at all. The camera phone is sitting right there, plugged in, screen off, apparently fine.&lt;/p&gt;

&lt;p&gt;Most people's next move is to walk over and restart the app. That is almost always the wrong move.&lt;/p&gt;

&lt;p&gt;There are three separate things Android itself does to a running camera's network connection. All three produce the same symptom. None of them stops the recording. Restarting the app does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does my phone security camera live view stop but the recording keep going?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; because they are two different jobs. Recording writes video to the phone's own storage and needs no network at all. The live view is a network connection, and Android is allowed to move, block, or kill that connection while the recording continues untouched. A frozen live view is normally a network event, not a camera event.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Does an old-phone security camera keep recording without internet?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; yes, if the app records locally. &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam&amp;amp;utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt; writes video to the phone's own storage with the screen off, and its built-in web server serves the live view over your local network. No internet connection is required for either the recording or for viewing over the same Wi-Fi. The internet is only needed if you want to watch from outside the building, or to push a YouTube Live stream.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction is the whole point. A cloud camera that loses its uplink loses the footage, because the footage was only ever on its way somewhere else. A phone recording to its own storage loses nothing but the view.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 1: Android moved the phone to a different network underneath the app
&lt;/h2&gt;

&lt;p&gt;Every Android app has a default network, and the system picks it, not you. The platform documentation is direct about the preference order: the system "typically prefers unmetered networks to metered ones and faster networks to slower ones."&lt;/p&gt;

&lt;p&gt;Picture the common case in a shop or a shared house. The camera phone is streaming over mobile data. Somebody switches the router back on after a power cut, or a neighbour's open network comes back in range. Android sees a free, unmetered Wi-Fi network, decides it is better, and switches.&lt;/p&gt;

&lt;p&gt;Here is the part nobody expects, from the same page:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When a new network becomes the default, any new connection the app opens uses this network. At some point later, all remaining connections on the previous default network are forcefully terminated."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read "at some point later" carefully. New connections go to the new network immediately, but the connection your live view is already using stays alive on the old network for an unspecified period, and is then killed. From the viewer's side that looks like a stream frozen on its last frame, with no error. Nothing crashed. The connection was cut out from under it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt; reload the viewer page. Nine times out of ten a fresh request opens on the new network and the picture comes straight back. If you are watching over your local network, the phone's address may also have changed with the network — see Reason 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to prevent it:&lt;/strong&gt; on the camera phone, forget every Wi-Fi network except the one you want it on. A phone that cannot see an alternative cannot be moved to one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 2: Data Saver blocked it, and you are on mobile data
&lt;/h2&gt;

&lt;p&gt;This one matters most on prepaid connections. Google's own documentation opens the topic with a sentence worth keeping:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Over the life of a smartphone, the cost of a cellular data plan can easily exceed the cost of the device itself."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Data Saver exists for exactly that. Google says it is "especially useful when roaming, near the end of the billing cycle, or for a small prepaid data pack." When it is on and the phone is on a metered network, the documented behaviour is blunt: "the system blocks background data usage and signals apps to use less data in the foreground wherever possible."&lt;/p&gt;

&lt;p&gt;A camera app streaming with the screen off is, as far as the system is concerned, exactly the sort of background data usage Data Saver exists to block. The recording continues, because writing a file to storage is not network usage. The stream does not.&lt;/p&gt;

&lt;p&gt;The fix is documented and takes one minute: "Users can allow specific apps to use background metered data usage even when Data Saver is turned on." On most phones that is &lt;strong&gt;Settings → Network &amp;amp; internet → Data Saver → Unrestricted data&lt;/strong&gt;, then switch on your camera app. The exact menu name varies by manufacturer, so search Settings for "Data Saver" if you cannot find it.&lt;/p&gt;

&lt;p&gt;Two related traps on the same setting. A Wi-Fi network can itself be marked as metered — many phone hotspots are, by default — so Data Saver can bite even when you are not on mobile data at all. And the per-app "background data" toggle in the app's own data-usage screen is a &lt;em&gt;separate&lt;/em&gt; switch from Data Saver, with the same effect. Check both.&lt;/p&gt;

&lt;p&gt;If you want to watch what this is costing you rather than guess, we wrote up how to measure it in &lt;a href="https://dev.to/superfunicular/what-happens-to-a-phone-security-camera-during-a-power-cut-or-an-internet-outage-they-are-not-the-40o5"&gt;what happens to a phone security camera during a power cut or an internet outage&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reason 3: the Wi-Fi came back, but it is not the same network any more
&lt;/h2&gt;

&lt;p&gt;This is the one that makes people think the app is broken, because everything looks restored. The router rebooted, the phone reconnected, the Wi-Fi icon is full — and the viewer still will not load.&lt;/p&gt;

&lt;p&gt;The documentation explains half of it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"When the network disconnects, the &lt;code&gt;Network&lt;/code&gt; object stops being usable. Even if the device later reconnects to the same appliance, a new &lt;code&gt;Network&lt;/code&gt; object represents the new network."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;"The same appliance" is doing a lot of work in that sentence. Same router, same password, same room — and the system still treats it as a new network, deliberately, so that nothing carries on using a connection it only thinks is alive.&lt;/p&gt;

&lt;p&gt;The other half is your router. Router addresses are handed out on a lease, and after a reboot the router is free to hand your camera phone a different one than it had before. The address you bookmarked, &lt;code&gt;192.168.1.7&lt;/code&gt; or whatever it was, may now belong to a television.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt; open the camera app on the phone and read the address it is currently showing, then use that. &lt;strong&gt;To prevent it:&lt;/strong&gt; most routers have a setting variously called DHCP reservation, static lease, or address binding — pin the camera phone's address there once and the bookmark stops rotting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one thing not to do
&lt;/h2&gt;

&lt;p&gt;All three of the above are network failures. The recording survived all three.&lt;/p&gt;

&lt;p&gt;Restarting the camera app is the only action in this article that ends the recording. If something did happen in front of the camera during those minutes, restarting is what turns a viewing outage into missing footage — in response to a problem it does not fix, because the network condition is still there.&lt;/p&gt;

&lt;p&gt;So: reload the viewer first. Check the phone's current address second. Check Data Saver third. Touch the app last, and only after you have saved anything you might need.&lt;/p&gt;

&lt;h2&gt;
  
  
  A five-minute test to run before you rely on this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Start the camera and confirm the live view works from your second device.&lt;/li&gt;
&lt;li&gt;Turn the router off at the wall for two minutes and back on.&lt;/li&gt;
&lt;li&gt;Do not touch the camera phone.&lt;/li&gt;
&lt;li&gt;When the Wi-Fi is back, reload the viewer. If it does not load, read the phone's current address off its screen and try that.&lt;/li&gt;
&lt;li&gt;Stop the recording normally and check the file. It should cover the entire outage, including the minutes with no network.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 5 is the one that matters. If the file has a hole in it, the app was not recording locally, whatever its store listing said.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the documentation does not tell you
&lt;/h2&gt;

&lt;p&gt;To be fair about the limits of what is actually written down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"At some point later" is never given a number. There is no documented maximum time between the default network changing and the old connections being terminated.&lt;/li&gt;
&lt;li&gt;The documentation describes what the system does to connections, not what any particular app does about it. Whether an app reconnects on its own is the app's business, not the platform's.&lt;/li&gt;
&lt;li&gt;Nothing in the Data Saver documentation addresses a foreground service that is streaming continuously — the examples are all about syncs and downloads.&lt;/li&gt;
&lt;li&gt;Manufacturers add their own battery and data restrictions on top of the platform's, and those are not documented by Google at all.&lt;/li&gt;
&lt;li&gt;The Data Saver page's own guidance was last updated in January 2024, well before Android 16.&lt;/li&gt;
&lt;li&gt;None of this says anything about how any specific competitor's app behaves. We cannot see inside other people's apps, and neither can you from a store listing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do this week
&lt;/h2&gt;

&lt;p&gt;Pick the camera phone up once and do four things: forget the Wi-Fi networks it should not use, add the camera app to Data Saver's unrestricted list, reserve its address on your router, and run the five-minute test above. That is a one-time job.&lt;/p&gt;

&lt;p&gt;If you are setting this up somewhere with no router at all, the hotspot arrangement is covered in &lt;a href="https://dev.to/superfunicular/how-to-use-an-old-phone-as-a-security-camera-without-a-wi-fi-router-the-hotspot-setup-nobody-1bd5"&gt;how to use an old phone as a security camera without a Wi-Fi router&lt;/a&gt;. And if you are still choosing an app, we keep a running list of the &lt;a href="https://dev.to/superfunicular/best-free-no-subscription-apps-to-turn-an-old-android-phone-into-a-local-only-security-camera-4582"&gt;free, no-subscription options that store video locally&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Background Camera RemoteStream records with the screen off to the phone's own storage, serves a live view from a web server running on the phone itself, and can push to YouTube Live when you want a stream that reaches outside the building. No account, no cloud storage, no subscription. It is free on &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam&amp;amp;utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;Google Play&lt;/a&gt;, and there is more at &lt;a href="https://superfunicular.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/develop/connectivity/network-ops/reading-network-state" rel="noopener noreferrer"&gt;Read network state — Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/develop/connectivity/network-ops/data-saver" rel="noopener noreferrer"&gt;Optimize network data usage — Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>privacy</category>
      <category>mobile</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Preview Is Flipped and the Recording Is Not: Android Mirrors a Front Camera Twice, and Only One Half Had a Public Switch</title>
      <dc:creator>Super Funicular</dc:creator>
      <pubDate>Thu, 27 Aug 2026 06:55:32 +0000</pubDate>
      <link>https://dev.to/superfunicular/the-preview-is-flipped-and-the-recording-is-not-android-mirrors-a-front-camera-twice-and-only-one-320b</link>
      <guid>https://dev.to/superfunicular/the-preview-is-flipped-and-the-recording-is-not-android-mirrors-a-front-camera-twice-and-only-one-320b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; On Android, a front-camera preview is mirrored and the video file written from that same camera is not. That is not a bug and it is not one setting misapplied. They are two separate settings with two different defaults, and Google's own CameraX guide says so in as many words. Until this month only one of the two had a public switch; a CameraX release dated August 12, 2026 gave the other one a setter and dropped the experimental marker from both. If you have ever put a phone somewhere, watched the live view, and later described the saved clip to somebody from memory, this is the difference between &lt;em&gt;left of the door&lt;/em&gt; and &lt;em&gt;right of the door&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The convention nobody states out loud
&lt;/h2&gt;

&lt;p&gt;When you look at a mirror you see yourself reversed, and you have seen yourself that way every morning of your life. A camera pointed at your face does not do that. It shows you what everyone else sees, which — the first time you notice it — looks subtly wrong.&lt;/p&gt;

&lt;p&gt;So phone makers flip the front-camera preview horizontally on its way to the screen. The picture behaves like a bathroom mirror because that is what a person holding a phone at arm's length expects. Nothing about the sensor changed. Nothing about the pixels leaving the camera changed. The flip belongs to the display path, not to the footage: it is applied late, to one copy, for the benefit of one viewer.&lt;/p&gt;

&lt;p&gt;That works perfectly for the case it was designed for: one person, holding the phone, looking at their own face, comparing it to nothing.&lt;/p&gt;

&lt;p&gt;It stops working the moment a phone stops being something you hold and becomes something you put down and leave. Now the same camera has two audiences — whoever is watching the live view, and whoever opens the file afterwards — and those two people are not looking at the same picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Android actually does, in Google's words
&lt;/h2&gt;

&lt;p&gt;The CameraX video-capture guide states the default behaviour directly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"While the camera preview is mirrored on the front camera by default, videos recorded by VideoCapture are not mirrored by default."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Read that twice, because there are two independent claims in one sentence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;preview&lt;/strong&gt; is mirrored. On the front camera. By default.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;recording&lt;/strong&gt; is not mirrored. By default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default is that they disagree. Not on some devices, not under some conditions — by design, as the documented starting state. The same page continues:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"With CameraX 1.3, it's now possible to mirror video recordings so that the front camera preview and the recorded video match."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which is worth reading for what it concedes. The ability to make the two halves agree is described as an addition. Before it, the disagreement was not something an app author could resolve at all through that library.&lt;/p&gt;

&lt;h2&gt;
  
  
  The date the switch stopped being experimental
&lt;/h2&gt;

&lt;p&gt;CameraX release notes carry a dated heading for every version, and this is the row that matters. Under &lt;strong&gt;Version 1.7.0-alpha03&lt;/strong&gt;, dated &lt;strong&gt;August 12, 2026&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Added &lt;code&gt;Preview.setMirrorMode&lt;/code&gt;, &lt;code&gt;Preview.getMirrorMode&lt;/code&gt; and &lt;code&gt;VideoCapture.setMirrorMode&lt;/code&gt; to public APIs, and removed the &lt;code&gt;ExperimentalMirrorMode&lt;/code&gt; annotation."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Two separate things are packed into that line.&lt;/p&gt;

&lt;p&gt;First, &lt;code&gt;Preview&lt;/code&gt; got a mirror setter of its own. Before it, the guide's story is one-sided: you could change what the recording does, and the preview did what it did. Now both ends of the pair are addressable, which is the only way to guarantee they agree rather than hoping the defaults line up.&lt;/p&gt;

&lt;p&gt;Second, &lt;code&gt;ExperimentalMirrorMode&lt;/code&gt; is gone. An experimental annotation in a Jetpack library is a warning that the shape may change and a compiler opt-in you have to write out. Removing it is the library saying this is now something you may depend on.&lt;/p&gt;

&lt;p&gt;A note on reading pages like this one, because it takes a second and saves a wrong claim: the footer of a Google documentation page carries a &lt;em&gt;last updated&lt;/em&gt; date for the page, and that is a fact about the publishing system, not a date attached to anything written on the page. The video-capture guide quoted above is stamped &lt;code&gt;2025-12-10&lt;/code&gt; while describing behaviour that is entirely current. The release-notes page has dated headings per version, and those are the dates of the actual events. Quote the dated row, never the footer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three constants, and why the middle one is almost never right
&lt;/h2&gt;

&lt;p&gt;The same guide lays out the options:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There are three MirrorMode options: MIRROR_MODE_OFF, MIRROR_MODE_ON, and MIRROR_MODE_ON_FRONT_ONLY."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Off&lt;/strong&gt; — never flip. The file matches the sensor. It will not match a mirrored preview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On&lt;/strong&gt; — always flip, including the rear camera. A rear camera has no mirror convention to satisfy, because nobody is looking at their own face through it, so flipping it produces a file in which every sign in the picture reads backwards for no reason at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-front-only&lt;/strong&gt; — flip when it is the front camera, leave the rear one alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google recommends the third one to line up with the preview, and describes it plainly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"mirroring is not enabled for the rear camera, but is enabled for the front camera"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One small trap if you paste from that page: in the sentence carrying the recommendation, the guide misspells the constant as &lt;code&gt;MIROR_MODE_ON_FRONT_ONLY&lt;/code&gt;, dropping a letter from &lt;code&gt;MIRROR&lt;/code&gt;. The correct spelling appears in the sentence immediately before it, and again in the code sample below it. If your compiler tells you the symbol does not exist, it is right and the prose is wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a phone you put down makes this worse than a selfie does
&lt;/h2&gt;

&lt;p&gt;Handheld, the mismatch is invisible. You look at yourself, you record, you never place the two side by side, and if you did you would have no external reference to say which one was correct.&lt;/p&gt;

&lt;p&gt;A phone that has been set up somewhere and left there breaks all three of those conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Somebody describes the picture to somebody else.&lt;/strong&gt; &lt;em&gt;The bag was on the left of the step.&lt;/em&gt; Left in which of the two pictures?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There is text in the frame.&lt;/strong&gt; A door number, a delivery label, a note taped to a window, a whiteboard, a page held up to the lens. Text is the one thing that makes a horizontal flip instantly, unmissably obvious — and it will be obvious in exactly one of your two pictures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The live view and the file get compared.&lt;/strong&gt; Not out of curiosity, but because somebody watched something happen and then went looking for it afterwards. That is the entire reason a recording exists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And there is a prior question that no documentation can answer for you: which camera is even doing the work. A phone propped in a stand with its screen facing you is watching the room with its rear camera, and none of this applies. A phone with its screen facing the room is using the front camera, and all of it does. That depends on which way round you set the phone down. It is not a thing you can look up. It is a thing you check.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two-minute check, no compiler required
&lt;/h2&gt;

&lt;p&gt;You do not need to build anything to answer this for your own setup. You need a sheet of paper.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Write a word on the paper.&lt;/strong&gt; Pick one that is not a palindrome — &lt;code&gt;CAMERA&lt;/code&gt; works, &lt;code&gt;MOM&lt;/code&gt; does not. Block capitals, thick pen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put the phone exactly where you intend to leave it,&lt;/strong&gt; facing the way you intend it to face. Not on your desk pointed at you. The answer depends on which camera ends up doing the work, so the test has to use the real arrangement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hold the paper up in front of the lens and look at the live view.&lt;/strong&gt; Is the word readable, or reversed?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record a few seconds.&lt;/strong&gt; Stop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the saved file and find those same frames.&lt;/strong&gt; Is the word readable now?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are four possible outcomes and each one tells you something you can act on:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Live view&lt;/th&gt;
&lt;th&gt;Saved file&lt;/th&gt;
&lt;th&gt;What you have&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;readable&lt;/td&gt;
&lt;td&gt;readable&lt;/td&gt;
&lt;td&gt;The two agree. Nothing to do.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reversed&lt;/td&gt;
&lt;td&gt;reversed&lt;/td&gt;
&lt;td&gt;The two agree. Also fine — they are consistent with each other.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;readable&lt;/td&gt;
&lt;td&gt;reversed&lt;/td&gt;
&lt;td&gt;The documented front-camera default: preview mirrored, file not.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;reversed&lt;/td&gt;
&lt;td&gt;readable&lt;/td&gt;
&lt;td&gt;The inverse. Rarer, and worth knowing before you rely on it.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rows three and four are the ones to write down somewhere, because they mean the picture you watch and the picture you keep are mirror images of each other, and the only person who will be caught out by that is whoever has to describe one of them out loud.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are the one building it
&lt;/h2&gt;

&lt;p&gt;The guide's own snippet sets the policy on the recording side:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;recorder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Recorder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;videoCapture&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Builder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;recorder&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setMirrorMode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MIRROR_MODE_ON_FRONT_ONLY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And as of the August release, &lt;code&gt;Preview&lt;/code&gt; carries &lt;code&gt;setMirrorMode&lt;/code&gt; and &lt;code&gt;getMirrorMode&lt;/code&gt; as public API, so the other half is addressable too. Set both explicitly. Two defaults chosen independently by two different classes is a coin flip you are not obliged to accept, and &lt;code&gt;getMirrorMode&lt;/code&gt; means you can assert on it in a test rather than squint at a screen.&lt;/p&gt;

&lt;p&gt;If you are using somebody else's camera app rather than writing one, none of those calls are available to you, and the paper test above is the whole of your instrumentation. That is not a small thing — it is a two-minute answer to a question that otherwise surfaces at the worst possible time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The edges of what these two pages will support
&lt;/h2&gt;

&lt;p&gt;Stating an unknown plainly is worth more than filling it with a guess, so here is where the sources stop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whether any particular app exposes this.&lt;/strong&gt; A library setting is not a user setting. Whether a given camera app surfaces a mirror control, or which default it picked, is not knowable from Google's documentation and is not something to assume in either direction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What a phone maker's own camera app does.&lt;/strong&gt; CameraX is one library among several ways to talk to a camera. An OEM app may take an entirely different path and land somewhere else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still photographs.&lt;/strong&gt; The passage quoted here is about &lt;code&gt;VideoCapture&lt;/code&gt;. It does not describe what happens to a photo, and this piece does not extend it there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which handsets have which behaviour.&lt;/strong&gt; A library version is chosen by the app that bundles it, not by the phone, so there is no device list to consult.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is a companion piece to this one about a different gap between what setup guides tell you to do and what actually happens: &lt;a href="https://dev.to/superfunicular/every-guide-to-running-a-phone-as-a-camera-says-grant-camera-and-microphone-only-one-of-those-is-dio"&gt;only one of the two permissions every guide tells you to grant is about the camera&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-line version
&lt;/h2&gt;

&lt;p&gt;Mirroring happens on the way to a screen, and Android decides it twice — once for the preview, once for the file — with two different defaults, and for several years an app author could only overrule one of them. Since August 12, 2026 both halves have a public setter. And if you are not the one writing the app, a sheet of paper and two minutes will still tell you which of your two pictures is the flipped one.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://developer.android.com/media/camera/camerax/video-capture" rel="noopener noreferrer"&gt;CameraX video capturing architecture&lt;/a&gt; and the &lt;a href="https://developer.android.com/jetpack/androidx/releases/camera" rel="noopener noreferrer"&gt;CameraX release notes&lt;/a&gt;, both on developer.android.com. Quotations are verbatim; the dated claim comes from the version heading, not the page footer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written while building &lt;a href="https://play.google.com/store/apps/details?id=com.superfunicular.digicam&amp;amp;utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=2026w35" rel="noopener noreferrer"&gt;Background Camera RemoteStream&lt;/a&gt;, an Android app for running a phone as a screen-off camera on your own network. More at &lt;a href="https://superfunicular.com" rel="noopener noreferrer"&gt;superfunicular.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>camerax</category>
      <category>camera</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
