# Question
Title: Moto G5 will not boot, what are my options to recover user data?
I have a Moto G5 (XT1676), which is stuck in a boot loop. It will ask for my pattern to unlock the partition, and then the motorola / lenovo logo spins forever and the phone will not boot.

What are my options to recover the user data ?

I am able to access the recovery, and I have tried already tried to clear the cache partition, with no luck. There is no option to backup the user partition in the stock recovery.

I could flash TWRP recovery and backup the phone from here, but my booloader is OEM locked, and unlocking it requires wiping the phone.

Is there a way to unlock the bootloader without wiping the phone ?
Or is there a way to backup the user partition from the stock recovery ?

# Answer
I was able to make my phone boot again by flashing a stock (official) firmware, **without erasing the userdata partition.** As it uses an official firmware, this approach does not require unlocking the bootloader. Here is a summary of the steps I followed.

## Install fastboot

Fastboot is an utility that is used to upload and flash ROMs on Android Smartphones.
On Linux, fastboot can be downloaded as follows:

```
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
unzip platform-tools_r31.0.0-linux.zip
# Using fastboot requires root permissions, so from now on
# we execute commands as root
sudo -s
export $PATH=$PATH:/path/to/platfrom-tools

```

For other OSes, you may find installation instructions here:

## Start the Moto G5 bootloader

To do so, shutdown you phone. Then press `Volume down` and `Power`
Plug the USB cable in, your phone should now appear when you type:

```
 # fastboot devices
 ZY3222HM8L Motorola Fastboot Interface

```

## Find an official ROM for your phone

This is definitely the most risky and tricky part, as there is no foolproof way to determine which is the good ROM for your phone.

The least risky way is to use the Lenovo Rescue and Smart Assistant (LMSA) to download the ROM for your phone. ***However, DO NOT USE LMSA TO FLASH YOUR PHONE, IT WILL ERASE YOUR DATA.***
Use LMSA to download the ROM, locate the zip archive it downloaded, and close it. LMSA requires Microsoft Windows, so this is not a viable solution for Linux users or MacOS users.

The other solution is to guess which ROM is appropriate for your phone, and download it from a public mirror. I used: https://mirrors.lolinet.com/firmware/moto/cedric/official/. Identify your model variant by looking at the information displayed by the bootloader. The important line is:

```
 Product/Variant: cedric XT1676 16GB P5

```

Try to explore the "RETAIL", "RETEU" (Retail EU), "RETUS" (Retail US) etc. depending on your country and try to find a an archive that matches your phone variant. Mine was in RETEU:

```
 XT1676_CEDRIC_RETEU_DS_8.1.0_OPP28.85-19-4-2_cid50_subsidy-DEFAULT_regulatory-DEFAULT_CFC.xml.zip

```

Make sure you download the *last* version for your phone (look at the dates, and version number 19-4-2) because the bootloader will not allow you to downgrade your OS.

## Flash the ROM on your phone

Unzip the archive you just downloaded, then locate the `flashfile.xml` file. Open it with a text editor, and locate the `<steps>` block

```
<step operation="oem" var="fb_mode_set"/>
<step MD5="9f3a13b8222b08e2171d2519e5276c31" filename="gpt.bin" operation="flash" partition="partition"/>
<step MD5="9ea732d853c838d9ed8486ca6df10321" filename="bootloader.img" operation="flash" partition="bootloader"/>
<step MD5="3605a87a6e4ba36c2f995204a7ec2aa6" filename="NON-HLOS.bin" operation="flash" partition="modem"/>
<step MD5="77aec885e43c1441ae775a36add08125" filename="fsg.mbn" operation="flash" partition="fsg"/>
<step operation="erase" partition="modemst1"/>
<step operation="erase" partition="modemst2"/>
<step MD5="bded198b6f1d31e9ce664376503b223b" filename="adspso.bin" operation="flash" partition="dsp"/>
<step MD5="0f114b5a2ab83e18444fa0d8e79a8e0e" filename="logo.bin" operation="flash" partition="logo"/>
<step MD5="4559fd8bad5404d1ec16a98614b3765a" filename="boot.img" operation="flash" partition="boot"/>
<step MD5="864a8060abe29e56fe2e8e93cac2c4a3" filename="recovery.img" operation="flash" partition="recovery"/>
<step MD5="39b15d4e645ba9576e819edfaf5b668e" filename="system.img_sparsechunk.0" operation="flash" partition="system"/>
<step MD5="ed64b41d92f7cf5f4079442fc446e0af" filename="system.img_sparsechunk.1" operation="flash" partition="system"/>
<step MD5="aef832b70ded5b7b5788bf87b61a8ad6" filename="system.img_sparsechunk.2" operation="flash" partition="system"/>
<step MD5="31c52fe5f412ac621e325f879a08e6e8" filename="system.img_sparsechunk.3" operation="flash" partition="system"/>
<step MD5="982e8d23a01a1017c72c23c56aed3ca2" filename="system.img_sparsechunk.4" operation="flash" partition="system"/>
<step MD5="1ef6cd540e95e3fe2c80d934376b6f3a" filename="system.img_sparsechunk.5" operation="flash" partition="system"/>
<step MD5="66a2a34e2bacd1ab0f5065524e2ce141" filename="system.img_sparsechunk.6" operation="flash" partition="system"/>
<step MD5="052ca5a46c322450dacad5678c31ac0e" filename="system.img_sparsechunk.7" operation="flash" partition="system"/>
<step MD5="0a20486510c1c5f45d1d8dbfcf0b9975" filename="system.img_sparsechunk.8" operation="flash" partition="system"/>
<step MD5="1e60bbc27184845acdc99d789f503c0c" filename="oem.img" operation="flash" partition="oem"/>
<step operation="erase" partition="cache"/>
<step operation="erase" partition="userdata"/>
<step operation="erase" partition="DDR"/>
<step operation="oem" var="fb_mode_clear"/>

```

Then translate each step into a `flashboot` command, and write a script. **However DO NOT TRANSLATE THE ERASE USERDATA AND ERASE DDR commands**. In my case the script I wrote was as follows:

```
cat fastboot.sh
set -x
fastboot oem fb_mode_set
fastboot flash partition gpt.bin
fastboot flash bootloader bootloader.img
fastboot flash logo logo.bin
fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash dsp adspso.bin
fastboot flash oem oem.img
fastboot flash system system.img_sparsechunk.0
fastboot flash system system.img_sparsechunk.1
fastboot flash system system.img_sparsechunk.2
fastboot flash system system.img_sparsechunk.3
fastboot flash system system.img_sparsechunk.4
fastboot flash system system.img_sparsechunk.5
fastboot flash system system.img_sparsechunk.6
fastboot flash system system.img_sparsechunk.7
fastboot flash system system.img_sparsechunk.8
fastboot flash modem NON-HLOS.bin
fastboot erase modemst1
fastboot erase modemst2
fastboot flash fsg fsg.mbn
fastboot erase cache
fastboot erase clogo

```

***Again, make sure THERE IS NO `erase userdata` line.*** Make sure your phone is plugged securely, then you may then execute this script as root. It will flash your phone with the official ROM.

Once this is done, use the volume up and down keys on your phone to navigate to the "Start" entry and press power. Your phone should reboot, and hopefully your userdata partition will still be there.
> 1 votes

---
Tags: boot-loop, motorola-moto-g, bootloader-lock
---


# Question
Title: What does it mean an ugly pop-up with an smiley face on my lock screen?
I've been getting pop-ups in the lock screen of my "Huawei Honor 6X" like this:

The notifications appear at random times. There is nothing else on the pop-up other than the smiley face made of ASCII characters and an OK button. The UI does not even look genuine.

Any idea what does it mean or what could it be creating these messages?

It is running EMUI version 5.0.1, Android version 7.0 and Android's November 6 2017 security patch.

UPDATE: The *Notification History* app did not register any app producing this pop-up. Her is another screenshot of the pop-up.

# Answer
> 1 votes
I've also started getting these and can't help but notice that you are also roaming with Telcel so my best guess is that these are USSD code dialogs from Telcel, basically it looks like they're either running some tests or having fun with it

---
Tags: lock-screens, popup
---


# Question
Title: Why do apps stop supporting older Android versions after some time?
My mother had a shopping app on her old smartphone which runs Android v6. Recently I noticed that the app on her phone was no longer supported. I've seen such things happen on old phones generally with many apps. I just wanted to know, why do companies drop their support to older OS versions after few years? Does it cost them a lot to continue the support to older OS versions as well? Does it require a whole team to be hired to just keep managing the support for older OS? Just being curious about this. Thanks.

# Answer
> 31 votes
There are two ways to support old Android versions:

1. Build one app that makes use of compatibility patches to supports old Android versions (down to a specific version) but also support all modern Android versions.
2. Build two or more apps each for a set of Android versions.

The second option is of course very costly as you have to develop maintain each app app version independently (or at least large parts of the app). This way is often not used or only if the app has been completely rewritten for new devices and for old devices the old version remains with minimal to no support.

Therefore the common way is option 1 – one app that has all compatibility fixes included. The main problem is that newer Android versions include interesting new features that are not (fully) available using the compatibility system Google provides. Therefore if you want to make use of them and the functionality is not optional in your app, app developers may decide to drop support of older Android versions in favor if being able to use new features of new Android versions. Decreasing the number of supported Android versions simplifies the app as old workarounds can be removed and don't have to be maintained anymore. And of course it removes the necessity to test the app on such old devices which can be a problem if you want to test your app on physical devices (not emulators) as old devices break and are more and more difficult to get.

# Answer
> 6 votes
The Android SDK (software development kit) sets a minimum version of Android that it supports, as explained by another Q and A:

https://stackoverflow.com/q/24441178/1836461

https://stackoverflow.com/a/61087797/1836461

Developers/companies (referred to as just "developer" from now on) can choose to support older version, but it gets hard to maintain that code. Speaking as a developer, it can be difficult to remember what settings or commands mean to different versions of an OS. Some of these differences are even deprecated (disapproved of) or completely removed from the newer SDKs, which makes it difficult or impossible to maintain backwards compatibility. And sometimes it's removed because of good reasons, usually meaning that it has significant security issues.

And just because the app is dropped, it doesn't mean that there isn't a newer version available. Some companies may rewrite their software completely (for various reasons including getting rid of large amounts of unnecessary legacy code), then post it as a separate app, leaving the previous version available as their idea of backwards compatibility.

In fact, most non-mobile software development is done like this. The old version is still available somewhere when a new version is released. Mobile stores like Google and Apple don't have an easy way for a user to get older versions, even though the developer can still see those old versions.

## Other reasons

A company may also decide that their method of communication (protocols) need to be updated to newer specifications that aren't available in old versions of the SDK. If you have an app written in an old SDK that works with old phones, but you need/decide to upgrade those protocols to a security version the old version just doesn't support, you may have to remove some backwards compatibility to get access to the newer standards in a newer SDK. And if you're going to completely rewrite an app, it makes more sense to do it in the latest SDK, rather than one that'll be completely out dated again in 1-2 years.

Even just rewriting an app to clean it up, remove unnecessary functionality, redo the user interface/user experience (UI/UX), or 100 other reasons, using the most recent SDK also makes the most sense.

The Answer I linked to above talks about 25% of Twitter users being ignored because of platform changes due to an upgraded app. Well, those 25% are the older phones that will likely be the fastest shrinking group of phones around. They will eventually be broken, dropped, the battery ruined with no replacements available, or a 1000 other reasons, including other apps ceasing to support them. I'm not saying it's a good move to remove that many users from using your app all at once, but evidently they thought they could survive it.

## Parallel example

In the desktop browser market, Chrome is the vast leader in usage.

https://netmarketshare.com/browser-market-share.aspx

https://en.wikipedia.org/wiki/Usage\_share\_of\_web\_browsers

As Internet Explorer (IE), Edge, Gecko, Firefox, Safari, and others have fallen out of use, developers stop doing as much cross-browser compatibility. As someone who's done that as well, it's a total PITA, especially when a requirement is pixel perfect compatibility, which is pretty much impossible. I have 5 browsers installed because of this reason, yet I only use 1 for browsing.

Some companies will insist on supporting IE and Edge, because "it's installed as the default on computers and most of our users don't know to install something else". It doesn't matter how few people actually use IE or Edge, because "the statistics are taken from sites where most users are devs or higher level computer users". But the reality is that the majority of browsers aren't worth the time to support. People don't support Netscape Navigator anymore, even if there is someone still running Win 3.11 for Workgroups, Win 98SE, or Mac OS 8.5.

## Conclusion

What I'm saying saying is at some point, you have to draw a line as to what you're going to support, as older versions cease to be useful or usable by both the user and the developer.

Spending time, money, and effort on old versions that aren't heavily used isn't usually a good use of resources.

Sometimes this is strictly a "make more money" ideal, in that the developer wants to force you to buy the new version, but that's not always the case. It makes more sense to developers to spend more time on new features and relevant bugs in a new version than new features and bugs in the old version.

# Answer
> 2 votes
There is more money in forcing users to upgrade to newer versions of Android, which in turn requires buying new hardware to run the newer version of Android.

To make this happen, the developers of Android change the programming APIs little by little as new versions come out. New ways of doing things are added, and old ways of doing things are removed over time. Bugs in the APIs that older software depended on are fixed, and no effort is put in to maintaining the old behavior to maintain compatibility.

Doing this forces app makers to constantly maintain their software and release newer versions of it with minor changes. It costs more money to tweak the software so that it works on older versions of Android as well as the latest release at the same time. To maintain compatibility across major versions differences of Android, multiple versions of the app may have to be maintained and distributed separately. This would become quite costly, and since most everyone has a newer device, the market to justify the extra expense just isn't there.

Microsoft's traditional approach has been to go to great lengths to maintain compatibility with older software. Large numbers of applications were tested on their next version of Windows prior to release, and many tweaks were done to ensure compatibility. Because of this, software developers can just make one version of the software that works on an older version of Windows, and it will work on the newer versions as well. With the release of Windows Vista Microsoft began to move away from this business strategy, and is now developing Windows 10 in a way that more resembles Android, but Windows compatibility with older software is still better than the mobile operating systems and even Mac OS X.

# Answer
> 2 votes
*TL;DR answer:*

Because programming for each version of Android is slightly different and thus supporting each of them costs extra money. When a particular version is generating less profit than necessary to justify maintaining it, the support is dropped.

# Answer
> 2 votes
The other answers are great, and they respond to the question directly; let us try a slightly different approach.

Why do people still have phones running such old versions of Android in the first place? Usually it is because **their manufacturers no longer support those models**. Why not? Surely part of the reason is that **the Android developers no longer support old versions of Android**.

So not only is it inherently costly to develop apps for old versions of Android, **such developers would have to put up with a platform full of known bugs that will definitely not be fixed**. Who wants to do that?

Maybe developers will put up with it for a while, if their users demand it. But when there are not many users using an old Android version anymore, it is likely to be dropped.

The issues discussed here and in the other answers also explain why some websites only support the “latest versions” of the major web browsers.

# Answer
> 1 votes
I work on software (math libraries) for quite a few platforms, including Android. I can describe our decision-making process for Android version support. It is not entirely typical, because we only produce native code, and don't touch Java or Kotlin.

We started on Android in early 2018 (so we were late-comers) because an existing customer who used other platforms wanted Android. They wanted to offer apps that dealt with data from their Windows products.

After some exploration and prototyping, we did an implementation, and shipped it in early 2019. The minimum Android version that the customer wanted support for was 5.0, and they only wanted 64-bit native code. Not needing to produce 32-bit native code was welcome, since the software has a *lot* of automated testing, and avoiding the need to test both 32-bit and 64-bit versions was welcome.

The main problem with needing to prepare in 2018 to support Android 5.0 was getting a 5.x device, since they were getting hard to find. We considered it obligatory to have a device on the oldest (or nearly so) version that we supported, so that we could reproduce version-specific bugs if they happened. If you try hard to ensure things like that won't be a problem, they usually don't happen at all.

We got an Amazon Kindle Fire with an OS based on 5.1, and found some incompatibilities with the 7.0 that we were using on new devices for the main testing. By early 2019 we were in production, testing on 5.1 and 7.0, and claiming support for 5.0 onwards. The newest released Android at the time was 9.x, but 8.x was the newest with any market share.

Android devices don't last forever, especially if they aren't being used regularly. Leaving them unused and unplugged for months is a bad idea, because sometimes they won't wake up again. To make sure that your software works on newer versions of Android, you need to test it on them, and you also need to preserve some devices on old versions, so that you can reproduce customer bugs. The simplest way to do this is to buy new test devices, approximately annually.

At that point, dropping support for older versions of Android was a good idea, because it enabled us to trim what would otherwise be an endlessly growing collection of old devices.

In mid-2020, we updated to a newer NDK, to get a newer C++ compiler, and made Android 7 our minimum supported version. Android 10 was the newest version in circulation, but we'd got some nice fast test 'phones with 9.0, and settled for that.

At the end of June 2022, I changed to Android 9 as the minimum supported. Android 12 was then the current version, and 13 was approaching release. The native code environment doesn't change nearly as fast as the app presentation layer, so updating every two years should be OK.

As of June 2022, according to the data at GlobalStats Statcounter, I'll be compatible with just over 82% of the worldwide Android market, heavily biased towards newer and faster devices. (88.6% of the North American market, 87% of the European market) My ISV customers (my employers don't sell end-user apps) are happy with this.

Update: GlobalStats Statcounter was unreliable for May and June 2023 but seems self-consistent again as of July. This was due to privacy changes in Google Chrome. GlobalStats compile their figures from web browsers that visit a wide range of websites, and updates to Chrome meant that the user-agent strings defaulted to Android 10, irrespective of the actual Android version. There are ways of getting the actual version, but they don't work for devices where the manufacturer has not implemented `getHighEntropyValues()`. That meant Android 10 was overrepresented.

# Answer
> 1 votes
The answers given thus far are factual, but I question the principles behind them, and would like to briefly address the question of "why..." in a *deeper sense*.

It makes sense that developers would upgrade apps and release new versions -- but in my opinion the release of new versions should not require retirement of older versions. Simply identify them as "unsupported" and let them remain available for those users who cannot run the new version. (Personally, I blame Microsoft for inventing, and making seem "natural," the "forced upgrade" business model in the computing industry...)

Actually, I also take issue with the very idea of "dropping support" at all. One can never be certain that *nobody* is still using something; I myself am just now getting around to looking at, and trying, some CD-ROM games for Windows 98... (Fortunately, I have never found it necessary to contact Microsoft for support, but somebody else out there may wish to.) Personally, as a software developer, I continue to support everything I've ever written, and have in fact taken support calls well into the 2000s for software I wrote (by which I mean parts of the turnkey host computer for a commercial product) between 1988 and 1997. In effect, this means supporting *everything*, *forever*. I reject the claim that this will cost any significant amount of money, because the number of users making demands on that support will decrease (probably inverse-exponentially, but never to zero, mathematically) and require less and less expenditure as time goes on.

---
Tags: applications
---


# Question
Title: How do I get the actual boot image file from a block device without padding?
I have 9.6mb file that after doing dd if=/dev/zero of=/dev/block/mtdblock2 I write to mtdblock2. Before writing I have done a sha1sum on the file. I can use applypatch -c to check both size and sha but if I do a sha on the blockdevice it is of course different because of the space left on the device. If I copy the device I will get a 16mb image including that free space. Every where I read the suggestions are to use fdisk to get a count and then use the count option in dd. However, this does not work because the block and partition is the boot partition. How can I copy the original file, same size and sha, back off of the block device?

# Answer
I would indeed use **dd**, with one or more of the several options available to specify the *length (amount)* of data to copy; otherwise, as you have noticed, **dd** will read the *entire contents* of the device, which is not what you want.

Re the apparent problem of the block device being the boot partition, the usual solution is to boot from some other medium (perhaps a LiveCD) so that the device you want to read is *not* the boot device/partition and can be read without difficulty. Before that, though, try **sudo dd ...** and see if running as root solves the problem without requiring more drastic measures.
> 1 votes

---
Tags: file-management, images
---


# Question
Title: How to access and/or delete an invisible Exchange account?
I seem to have somehow developed an invisible exchange account on my rooted (but otherwise stock) 4.1.2 AT&T HTC One. I don't know at what level to attack this problem -- is it a Sense issue or an Android issue? What app or data should I delete / uninstall or clear?

If I go to Settings -\> Accounts & sync -\> under the "Manage Accounts" area there is no Exchange ActiveSync account even listed.

If I try to add an "Exchange ActiveSync" account I get the Error message in a popup box that says **"You have already set up this Exchange account."** Googling for that message or searching for it on xda did not yield anything helpful.

I'm not sure if this developed at some point from a Nandroid restore or what...

Does anyone know how to delete this invisible Exchange account that it says I have already set up? I can't see the account anywhere to delete it, but it's data must exist somewhere inside "Accounts & sync" and so it thinks I have already set it up... I'd like to delete it for real and then re-add it.

**UPDATE #1:** I don't use any Exchange services (Outlook Web, nor MS Outlook).

# Answer
I think I have encountered a similar issue before. Not sure how I fixed it, but

* see if you have a Device Administrator for Exchange. In the Samsung Galaxy S4, it's in `Settings > More > Security > Device Administrators`. Uncheck / Remove it there, do a restart, and see if that helps.
* or: Go to your application manager, and swipe to the ALL section. Then look for the **Email** app. Click that and do a `Clear data` and/or `Clear cache`. Also, look for the **Exchange services** app, and do the same. Restart, and see if that helps.

Based on Asker's feedback, the second approach fixed the problem. He also cleared the GMail app, although it's not necessary.
> 4 votes

# Answer
Here's how I fixed this on my HTC One 1. Open Settings -\> Apps 2. Find the Mail application in the list of all Applications 3. Press the "Clear Data" button 4. Reboot the phone.

After doing this I was able to add my Exchange account
> 1 votes

# Answer
Under Android 7.1.1. I had deleted my work Exchange account because I was trying to troubleshoot why that account wasn't syncing parts of my calendar. I went to accounts and deleted it, then when I tried to recreate it I got the same dialog, wouldn't let me set it up with the username on my Excahnge account, said it already existed.

I restarted, deleted all my gmail accounts as well to no avail. Tried wiping the cache in the fastboot menu, same thing. I finally ended up going to Settings/Apps/gmail, but there is no button to clear data, so I disabled gmail, and it asked me if I wanted to go back to the original installed gmail. I confirmed that, restarted, and I was finally able to add that Exchange account. Hopefully sometime soon it will update gmail, but either way it is working.
> 1 votes

# Answer
I developed the "Duplicate Account", "You're already using this username..." problem after using AkrutoSync in multiple locations with the same laptop over WiFi. I was using different routers at each location of course, which, provided different IP address. Seeking a better way to change locations/servers/IP address, I experimented with the server IP address settings and the result was that I locked an exchange account into a file and could not delete the account. (Nexus 5X on Oreo 8.1.0) I cleared data and cache for both my gmail and my Google Inbox app, then rebooted and the problem was solved. Thanks.
> 1 votes

# Answer
I had this problem on a Xiaomi Poco X3 just now. I had removed the 365 exchange email account from gmail client to enable 2 factor authentication then when I added the account back in gmail said it already existed and would not let me. After trying the above solutions and them not working for me I realised that my google account on the poco x3 used the same email address as my 365 exchange email account. I removed my google account credentials first then re-added my 365 exchange account in gmail which it accepted this time and then once the emails were working I added back my google account credentials with no problems.

It worked for me.
> 1 votes

# Answer
Go into the Mail App. Go to Account Settings.... Delete account. Keep deleting until the exchange account is deleted. Then re-add the accounts.

Works like a charm!
> 0 votes

---
Tags: exchange, accounts
---


# Question
Title: Enable location services via ADB or shell
I have a rooted phone. Is it possible to enable location services (GPS or network location) via ADB or Terminal Emulator?

# Answer
On Android 6.0,

To enable:

* GPS: `adb shell settings put secure location_providers_allowed +gps`
* Network: `adb shell settings put secure location_providers_allowed +network`

To disable:

* GPS: `adb shell settings put secure location_providers_allowed -gps`
* Network : `adb shell settings put secure location_providers_allowed -network`

On Android 11.0,

To enable:

* GPS: `adb shell settings put secure location_mode 3`

To disable:

* GPS: `adb shell settings put secure location_mode 0`
> 20 votes

# Answer
Android location service comes with different options:

1. High accuracy: `gps, network`

* Enable: `adb shell settings put secure location_providers_allowed +gps,network`
    * Disable: `adb shell settings put secure location_providers_allowed -gps,network`
2. Phone only: `gps`

* Enable: `adb shell settings put secure location_providers_allowed +gps`
    * Disable: `adb shell settings put secure location_providers_allowed -gps`
3. Battery saving: `network`

* Enable: `adb shell settings put secure location_providers_allowed +network`
    * Disable: `adb shell settings put secure location_providers_allowed -network`
> 7 votes

# Answer
`location_providers_allowed` no longer works for Android 10 (API level 29).

Instead, you can set the `location_mode` to `LOCATION_MODE_HIGH_ACCURACY` with a value of 3:

```
adb shell settings put secure location_mode 3

```

---

**NOTE:** Probably won't work \>v29 as this is *already* deprecated as the docs on Location Mode mention:

> This constant was deprecated in API level 28. The preferred methods for checking location mode and listening for changes are via `LocationManager#isLocationEnabled()` and `LocationManager#MODE_CHANGED_ACTION`.

Don't know what a programmatic way to do this through the shell will be once this constant disappears.
> 5 votes

# Answer
* Enable: `adb shell settings put secure location_mode 3`
* Disable: `adb shell settings put secure location_mode 0`

See Stack Overflow - How to enable/disable GPS location services on Android 9 via ADB commands (not rooted device).
> 4 votes

---
Tags: adb, settings, shell, location-services
---


# Question
Title: How can I Have Separate Alerts for Email and SMS?
I am using a Samsung Galaxy S4 running Android 4.2.2. Currently both SMS and Email notifications have the same sound. Before I was on this phone I was on an iPhone and this was easy to change. I cannot find a way to distinguish between alerts.

In browsing this site for an answer I came across this question which had this answer:

> You can customize the Notification settings for both Gmail and Messaging in each of the apps separately.
>
> In Gmail press menu and go to More-\>Settings and look at the Notification settings section.
>
> In Messaging press menu then Settings and look at the Notification settings section.

I assume this answer is out-of-date because it doesn't work on the Galaxy S4.

I am using the Stock Gmail App for email and I use GO SMS PRO for messaging.

How do I change to separate alerts?

# Answer
In order to change the notification sound on the **GMail** app you can do the following:

1. Open the GMail app and press the menu button (the one to the left of the Home button)
2. Press Settings and then choose the email address (not general settings)
3. Touch the word "Inbox sound & vibrate"
4. Click "Sound"
5. Then there is a popup for the choice of notification sound you want for your email.

For **GO SMS PRO**:

1. Press the same menu button
2. Settings
3. Advanced
4. Notification settings
5. Default notification settings
6. Select ringtone
> 4 votes

# Answer
With this app you can set up a different notification sound for each app on your phone. Launch it. Add "Messages" (com.android.mms) in apps list and set up sound for sms notification. Then add "Gmail" (com.google.android.gm) in apps list and set up sound for email notifications.
> 0 votes

# Answer
Settings -\> Apps -\> (Select App you'd like to change notification for) -\> Notifications -\> Other -\> Sound
> 0 votes

---
Tags: notifications, gmail, samsung-galaxy-s-4, go-sms
---


title: How can I bypass the "first setup"?

text:
# Question
Title: How can I bypass the "first setup"?
Is there a way to bypass the first setup screen, that shows up during first boot of a new/stock ROM or after factory reset?

# Answer
**Yes there is,** after the phone is opened and SetupWizard is on, starting with top-left corner of the screen, all corners must be tapped once, in a clockwise direction. (Top left, top right, bottom right, bottom left to be more specific)

It can be hard to do it properly at first try so if it doesn't work, just try again.

Here's a walkthrough video.
> 9 votes

# Answer
Today the answer is most likely no, this is not possible to skip the initial setup due to FRP.

From https://www.androidcentral.com/factory-reset-protection-what-you-need-know

> Factory Reset Protection (FRP) is a security method that was designed to make sure someone can't just wipe and factory reset your phone if you've lost it or it was stolen.
> 1 votes

---
Tags: factory-reset
---


# Question
Title: Can I improve accuracy of Google Location while hiking
My Google Location history is amazingly helpful and informative, and generally accurate. I have all settings set to highest so I can always get the best location accuracy. I've read several posts about how Google estimates my location, using cell towers, wifi SSIDs/BSSIDs, etc and it all makes sense. But when I go on my daily hike, the accuracy is 'way off' by a few miles. I take photos on my hike and their Geo-location tagging is accurate to within a few feet, so I know the location information is available with GPS.

The following screen shot gives an example. The red line was drawn by me and represents my hike. The blue lines are the estimation by Google Location. My hike follows a ridgeline that surrounds a residential neighborhood. Obviously, my phone's location sensor is latching onto either cell-towers or wifi access points in the neighborhood.

Is there any way I can tell my phone to use GPS to report location, rather than wifi or cell tower, during a hike? If I launch google maps during the hike, will that cause my accuracy to improve? I often take photos at various locations along the hike (and these are accurately geo-tagged) but this doesn't seem to help the location map below. I did notice that, if I use a 'hiking app' such as 'map my walk' or 'strava', the location as reported to Google is very accurate. So do I need to launch 'any app that uses GPS' to make the GPS location available to Google?

Also, I've read that I can click on 'blue dots' on the map to see where it's getting the location information from, but I see no blue dots no matter how much I zoom in.

Thanks!

# Answer
Without using a third-party app, you are going to have to keep the Google Maps app open at all times.

I use Google Timeline along with Google Fit for daily exercise walk tracking. In the pocket, screen off, I get what you get, nearby areas or generalized activity around my home. When I have the Google Maps app open, screen on, I can get walking tracks down every street such that when I look at it in Timeline/Google Fit it looks like I'm tracing the neighborhood blocks. If I go into a shop and forget to bring the Google Maps app into the foreground, even when I'm listening to a podcast, the location will jump to when I finally remember to bring forth the Google Maps app. And as expected it does drain the battery more.

I'm using a Pixel 2 with Android 10. Reducing battery usage has been theme with the newer versions of Android so I'm in agreement with Robert, unless you have something trying to getting GPS location data, the lower accuracy location data will be used. I would expect walking directions (like driving directions) which has the Google Maps app in the foreground all the time have the most accurate location data.

One compromise is to open the Google Maps app at some moderate frequency (say 5 minutes) and allow it to get a GPS lock. While the detail of your track not be as accurate as "on all the time" the positions recorded would at least be more aligned with your path.
> 2 votes

# Answer
There's a trick: open Google Maps, press Go button, then select a very far away destination that you are not going to arrive, then confirm to find a route. Google map will keep running on background without screen on. Also turn off the navigation voice to avoid the sound they would make. By doing that, Maps will always track your current location even if you are not really going to that destination and all location data will be saved. I use that trick often and it's way more accurate than default location report.
> 4 votes

---
Tags: google, geolocation, maps
---


title: True instant sync via Dropbox

text:
# Question
Title: True instant sync via Dropbox
I want to have my todo.txt file synchronized on PC and Android via a cloud service **in both ways** and **instantly on change.** Let's call this **true instant sync.** Unfortunately, I have not found a good solution yet and I don't understand why.

**My setting:** Markor to edit todo.txt on Android, todo-txt script to edit todo.txt on my Linux PC, official Dropbox client on both Android and PC.

In order to get true instant sync, I tried **FolderSync** and **Autosync for Dropbox.** However, I think that neither of these apps does what I want flawlessly and their precise function is not really documented. For example, Autosync for Dropbox has the options "autosync", "instant upload", "clever detection of changes" (available in the pro version) and one can also set synchronization in given time intervals, all independently of each other. What do these options do precisely? FolderSync seems to support synchronization in time intervals only, which is not what I want.

I imagine that a true instant sync solution should work as follows:

1. There is an interrupt whenever something is written in the shared folder .
2. The interrupt is associated to the sync client, which sends the information about changed files to the sync server immediately.
3. The sync client pings the sync server whenever its network address changes.
4. When another sync client uploads something to the sync server, the sync server broadcasts the information about changed files to all sync clients.
5. There is an interrupt whenever a packet from the sync server is received.
6. The interrupt is associated to the sync client which updates the local files immediately.

**Questions:**

1. How do 1--6 differ from the reality and what are the problems? Aren't the interrupts 1 and 5 already implemented on the system level?
2. Can I configure Autosync for Dropbox or FolderSync (+ Tasker) so that I get true instant sync which was defined above?
3. Do you know any other solution for true instant sync?

Thanks!

# Answer
* AFAIK, *true instant sync* (as in first para of your question) , isn't possible using Dropbox, for reasons mentioned in answer here. If Dropbox itself doesn't permit, you can't force it through either apps you tried (I tried and have the pro version of both these apps).
* My need was to have a real time sync across Android and PC (Linux and Windows). The only app I could find was from standard notes. The Android app on Play Store is marked beta but don't let that discourage you. It works perfectly well on Android, Linux and Windows for real time sync.
* Only thing left is Dropbox sync - if you go in for pro version of standard notes, you can install an extension, that provides daily updates to Dropbox, and obviously *isn't* real time. But then your files are synced across platform in real time, so updation in Dropbox may not really matter, unless you have other reasons. I haven't tried this extension because I stopped using Dropbox.

As far as real time sync goes this ticks all the boxes except via Dropbox. You don't need to go in for extended (pro) version, if you decide to cut off Dropbox or use either of the apps you tried for periodic sync.
> 1 votes

---
Tags: sync, file-management, automation, dropbox, to-do-list
---


# Question
Title: String of jumbled text is appended to every incoming SMS with Project Fi
I just picked up a new Honor 8 (running EMUI 5/Android Nougat) and I'm having an odd problem when receiving SMS messages.

Whenever I get a message, an odd string of text with a length of 16, starting with a tilde`~`, like `~l/Adk/ljAdADFWjlk`, is appended to it. This is regardless of my SMS app (I've tried the preinstalled one, Pulse, and Google's Android Messages).

Here's an image of a conversation:

Screenshot (click to enlarge)

How can I stop that random string of text from appearing after the intended message?

---

**Edit:** For extra details, my carrier is **Project Fi** (reduced to just T-Mobile on the new GSM-only phone) and the issue occurs regardless of sender, be it an iPhone or Android phone.

# Answer
It looks like there's something wrong in your carrier's SMS router. You should contact your carrier and ask for support.
There's no encoding issues in this case, so I disagree with @beeshyams . The appended text is a stream of base64-encoded data, which after being decoded, resembles a stream of 11-byte data. According to my experience, it is very likely some metadata of the SMS message you received. You can safely ignore it.

**Edit:** Merged information from comments.
This is a general phenomenon of using Project Fi's service on a non-Fi phone. Discussions are here and here. A solution is to use Google Hangouts for text messaging.

Appendix: Decoded info from image (re-formatted manually)

```
$ base64 -d | hexdump -Cv
q/Pj/QAHwY+Jhgg= : AB F3 E3 FD 00 07 C1 8F 89 86 08
jaT2JQAcd3EM7Ag= : 8D A4 F6 25 00 1C 77 71 0C EC 08
BMXciQANmWXBLQg= : 04 C5 DC 89 00 0D 99 65 C1 2D 08

```
> 2 votes

# Answer
In addition to the answer above, it looks like anything interfering with the Google Fi app can also cause the problem.

This started happening on my kids' phones (Nexus 6P and Google Pixel) because I had blocked access to the Google Fi app using the Family Link app since I didn't see any reason why they needed to have access to it.

To fix it, open the Family Link app on your parent device, open your child's management tile, tap "Manage Settings", then "Android Apps", then select the "Blocked" tab. If Google Fi is in the list, select it and allow access.
> 2 votes

# Answer
Simply launching the Fi app, then rebooting the phone worked for me. (I had not blocked the app, so I think Fi was just having a problem).
> 1 votes

# Answer
Solution for me (so far) on my Galaxy S20 was to disable 'Optimize Battery Usage' for the Google Fi app. (Setting,Apps, three vertial dots in the top right corner, Special Access, Optimize battery usage, Select All, Find Google Fi App and move the slider to the left).

Had to do this as well for my Tesla App to open my car doors and Arlo App to get notifications from my home cameras.
> 0 votes

# Answer
I started having this problem after switching from AT&T to Google Fi about a year ago. I found a few posts where people said to download the Google Messages app, tap the three dots to get into settings, select Chat Features and turn this off. I updated my apps from Play store, than I went back to the Google Messages app and at the bottom of the screen it was now asking if I wanted to enable advanced message features. I tapped yes, had to give it permission, had to agree to not limit the app's battery usage, and now I can access the Chat Features in Google Messages. Although this worked for me, it didn't for my fiance.

My other solution is to install "Google Carrier Services" app. Installing it made Google Fi to show up with an update, so I updated it.

These steps solved the problem for both me and my fiance.
> -1 votes

---
Tags: sms, project-fi
---


# Question
Title: Adb sideload flashing file type recovery or fastboot
I want to flash rom through Adb sideload I am confused with zip.file used in sideload. is it recovery file or fastboot file? I am downloaded both from https://xiaomifirmwareupdater.com/miui/lavender/stable/V11.0.9.0.PFGINXM/

# Answer
adb is unrelated to fastboot, you can either run adb commands with usb-debugging enabled in boot mode, or adb sideload command in recovery mode. fastboot commands work with fastboot mode only (no adb commands accepted) and requires unlocked bootloader
> 0 votes

---
Tags: rom-flashing
---


title: Locked out of Samsung Galaxy S4 tablet

text:
# Question
Title: Locked out of Samsung Galaxy S4 tablet
I cannot remember password on my tablet Samsung Galaxy S4. It just keeps giving me options to enter, I've tried 30 times I should have never changed it in the middle of doing something.

# Answer
> 0 votes
If the S4 is connected to the Internet and has your Google Id logged in, then you can change your password using Android Device Manager.

# Answer
> 0 votes
You can use recovery mode option. You can erase cache partition.

Find my mobile is on then you can erase mobile using google account. You can also use Samsung account and erase mobile.

You can connect mobile to computer and restore mobile. https://mobile-cellphones.blogspot.com/2021/02/howto-unlock-pattern-lock-and-password.html

---
Tags: samsung-galaxy-s-4, locked-out
---


# Question
Title: Use my Android phone as the camera and microphone for PowerPoint slide recording
For conference purpose, I have to record a PowerPoint presentation recording. (That is, I have to record a video of me explaining a PowerPoint presentation using the webcam and mic while playing the presentayion). The problem is that the inbuilt camera and microphone of my laptop are not that great. iS there any way to use my android phone as the source of the camera and mic input? I tried DroidCam and I could connect the camera to the laptop. But when I start recording, it is using the default inbuilt camera instead of my phone.

I'm using Samsung Galaxy S9 running on android 10.

# Answer
> 0 votes
Sorry for the confusion there is an option inside the PowerPoint where you can select the source of audio and video. You can select droidcam there.

---
Tags: microphone, webcam
---


title: Compromised phone

text:
# Question
Title: Compromised phone
I have a stalker who has managed to intercept texts and maybe calls. I have changed phones, providers, and phone numbers and they always get in. I also believe my locations are being tracked. So my question...if I buy a 2nd phone with different phone number, leave the compromised phone at home and forward calls and texts to the new phone would my movements, calls and texts still be able to be intercepted. After all this harassment I would like to try something else before I do a factory reset, since nothing else has worked...and law enforcement cant help...I've tried.

# Answer
> 1 votes
The degree to which you are being stalked is exceptional. The attacker's apparent success in targeting you can only be possible because they are not dependent on the things you have changed. They must have another angle you haven't discovered yet. Perhaps someone with physical access to your phone/home, hidden cameras, etc. Finding the GPS tracker indicates to me that this attacker is not fantasy, and means you must put a convincing end to this for your sanity.

You didn't mention changing your google account or how/if you restored data/apps from your old phone to the new one. The latter being important if the attacker has ever had physical access to your phone.

Anyone accessing your google account would result in email notification messages that you would probably have noticed. But if there was ever a malicious app installed it might have been auto-migrated to the new phone.

If you do get a second "secure" phone be sure to start a unique google account with it - and keep it disassociated with your old phone.

You must still find the security leak. Start with locking down your home with video monitoring-using blink or equivalent. Use a camera to monitor your home-safe-space for uninvited visitors when you are away. Don't forget that the attacker may be someone you know and do not suspect.

Take the GPS tracker and put it somewhere where you can focus a camera on it. Sooner or later your will try to retrieve it.

There will be a reason that motivates the attacker. Only you may know what that might be, but use that as bait to predict their next move.

---
Tags: security
---


# Question
Title: My Android phone does not start - how to isolate hardware issue?
I use Moto G6 ALI with a custom ROM Pixel Experience running Android 11. So far so good and I was using this setup for almost two weeks as my daily use phone.

Today suddenly the phone froze when opening Whatsapp. No further response on the screen was observed. I had to restart the phone by pressing the power button for more than 5 seconds. Since I have unlocked by bootloader several years ago, I saw the boot locker unlocked warning. This usually stays for 5 seconds and then after I usually the boot animation. But this time there is no movement beyond the unlock warning.

I had flashed TWRP recovery and tried booting with it by pressing Vol-Down+Power button and then choosing "Recovery". The phone started the recovery mode but stuck with TWRP logo.

I then restarted to bootloader and gave the command "fastboot devices" and my device was recognised. So I downloaded the 64bit version of the recovery image and temporarily booted with the command "fastboot boot mali.img". This too stuck at the same point. Any clues on how to go ahead?

# Answer
If your device received update recently which was already scheduled waiting on reboot, the instruction is placed in `/cache/recovery/command` TWRP may stuck on that instruction. this can be cleared by formatting cache partition

TWRP Commandline Guide
If device stuck on TWRP splash screen you still might have command line access via `adb`. Note daemon has 30 second delay on start, `adbd` is not ready when TWRP is boot-looping

```
adb shell format cache

```

or manually if partition is not in fstab

```
adb shell
find /dev/block -name by-name
mke2fs /dev/block/bootdevice/by-name/cache

```

If bootloader is unlocked you can also format from `fastboot`

```
fastboot format:ext4 cache

```

---

For further analyzing boot-loop **usb-debugging** is required. On unlocked device you can enable by modifying `default.prop`

* download ROM according to your version
* unpack `boot.img` and extract with AIK
* modify `ramdisk/default.prop` and repack
* flash `image-new.img` into boot partition

(you can read how it works here)
Why "adb root" does nothing?

```
  ro.adb.secure=0
  ro.secure=0
  ro.debuggable=1
  persist.service.adb.enable=1
  persist.service.debuggable=1
  persist.sys.usb.config=mtp,adb

```

---

If your device is booting far enough you should be able to capture some log during boot. For details and more information on debugging refer to the `logcat` wiki
Reading and Writing Logs
> 1 votes

---
Tags: recovery-mode, twrp, boot
---


# Question
Title: How to be woken up when receiving a text message with an Android phone?
I am on call sometimes and I am getting SMS and email from our systems. The sender is an email to SMS gateway that is unique to this and always the same, the messages start with the same words. I need to be woken up by them, but right now, that isn't happening.

I use Locale, and the Locale "Inbound SMS" Plug-in, but that does not seem to be working yet (with a test account, it does not go full loud and alt ring tone).

I would like it to do something like have a song start playing loudly. It would also be nice if it sanely handled getting 200 pages in 10 min (probably just disable Locale).

I have T-Mobile G1 on Android 1.6. I could root it if it is needed, but really rather not.

Any tips or thoughts?

# Answer
I went with Tasker, it is a bit cheaper (especially when you realize that you are less likely to need plug ins with it, though it can use Locale plug ins it seems), it is trickier to get running, but allows for a much wider range of options than Locale.

So when it sees an SMS come in with "PROBLEM" in the subject, it turns music playback to maximum volume, and then starts playing a song in a loop, until you click on the stop button. I need to add the feature to not trigger again for a few minutes (to deal with the flood issue).

I looked at Setting Profiles web page, but have not tried it.
> 4 votes

# Answer
**Tasker** is undoubtedly a powerful answer to this and MANY other wants, so you have probably solved your need. I will just add, a good point-solution for this specific need would be **Where's My Droid**. It is a free app, geared toward finding a misplaced phone. But it would work for this use case as well, with the exception that you don't get to select a custom ringtone.
> 3 votes

# Answer
I am the developer of Locale.

This can be accomplished with Locale, with a slight tweak to the current setup.

As current described, you have a race condition: Locale is increasing the volume but only after Android has already posted the notification, so the volume increase appears to have no effect.

To get this to work correctly, try the Locale Notification Plug-in to post a separate notification when the text message comes in. The Notification Plug-in has a "force volume" option that will turn the volume up and ensure the notification is heard.
> 3 votes

# Answer
Why not just use Handcent SMS and configure a custom "loud" ringtone for that particular sender. you can also configure the app to repeat the alert every X minutes, so you keep getting reminded until you dismiss the alert.

In Handcent, open the conversation thread you want to customise and click the Personalization icon (in the top bar, to the right of the name of the person). you can then set different notification icon / ringtone / vibrate pattern and LED settings (if your device has one).
> 2 votes

# Answer
I saw a tip recently: You can set your "Where's My Droid?" passphrase to be that string that you're expecting. That'll change the device from silent mode and go to maximum volume.
> 1 votes

# Answer
You can do this using Android Automate, an app I personally prefer to Tasker for most things. Here's a screenshot of the flow I used to trigger an alarm when a text is received from a specific phone number. Use this screenshot to see the order in which the blocks need to connect to each other.

And the details of the blocks:

## SMS received

This block waits for a text to be received. Set the "Phone number" field to the number you want to watch.

## Sound play

This is what we'll use to simulate the alarm. Set the "Proceed" option to "Immediately." This will ensure that the sound plays continuously until we manually stop it using another block. For good measure, check the "Repeat sound indefinitely" checkbox as well.

Set the "Notification channel" to a user-managed channel with "Urgent" priority. If you don't already have one, in the dialog that appears, click the plus button at the top of the dialog to create the new channel. You'll then need to save out of the block and flow, all the way back to the list of all flows. Then tap the hamburger menu at the top of the screen and click "Settings" \> "Notification channels." Then tap on the name of the new channel you created. This will take you to your phone's settings for the channel. Set "Importance" to "Urgent", and turn on both "Vibrate" and "Override Do Not Disturb." Then go back to the Automate app and return to editing the new flow.

## Dialog message

This displays a dialog that you have to manually close before we'll stop the sound.

Set the title and message options to whatever you wish, and check "Show window directly if possible."

## Sound stop

This is what stops the alarm once you close out the dialog. It's important that you connect this block's "OK" circle to the "IN" circle of the "SMS received" block. Doing this ensures that the flow will loop and continue listening for SMS messages once an alarm is dismissed.

## Finishing Setup

Once you've finished creating the flow, save it, rename it to what you wish, and click the "Start" button. It's also a good idea to go to the app's settings and enable "Run on system startup." This will ensure that the SMS alarms flow will resume immediately when you restart the phone.
> 1 votes

---
Tags: alarm, locale, sms, calls
---


# Question
Title: Can I prevent my S6 from reducing brightness at 5% battery?
My Samsung Galaxy S6 with Android 6.0.1 always dims the screen when hitting 5% remaining battery. This is very bad in bright sunlight because the screen gets so dark that it's impossible to use the phone and pure guesswork to brighten it again. This “feature“ seems to override both auto and manual brightness setting. It also happens irrespective of power saving mode on/off. How can I stop it from doing this?

# Answer
> 1 votes
That feature is built into the kernel. You would need an unlocked boot loader and a custom recovery. Then you could flash a different kernel or custom rom to achieve this.

# Answer
> 1 votes
I believe you are looking for Power Saver Mode. This is under the *Settings \> Battery*. There is usually an option to turn on Power Saver Mode altogether or adjust what it does.

See

http://www.samsung.com/us/support/answer/ANS00038729/

# Answer
> 0 votes
Samsung Galaxy Phones do dim their phones once it reaches the low level of battery. You may try this: http://www.samsung.com/ie/support/skp/faq/1056771

---
Tags: settings, battery-life, samsung-galaxy-s-6, screen-brightness
---


# Question
Title: How to unlock Samsung Galaxy Note 4 from Verizon?
I bought Samsung Galaxy Note 4 on eBay. It's a Verizon phone. The description said clean IMEI and not blacklisted per Swappa.

I was trying to get it on my Cricket account which is a GSM carrier, but my wireless company said it was locked.

How do I unlock it?

# Answer
> 0 votes
When you insert your Cricket SIM card, check whether it prompts for an unlock code or not. If it does, you can use a third party website like UnlockRadar.com. But if it doesn't, there's not much that you can do.

# Answer
> 0 votes
You might need to double-check if it's really a Samsung Galaxy Note 4 from Verizon because it should be automatically unlocked to use with Cricket.

If your model number is anything other than Verizon, then you need to unlock the phone. Not all phones will ask for unlock code, only for those AT&T and Cricket. But if the phone is T-Mobile or Sprint, the best way to unlock it is by far via USB remote cable.

You can use third-party websites like miliunlocks.com to unlock it, they unlocked the phone for me in under 10 minutes.

# Answer
> 0 votes
You can get unlock code. You need to give imei number and sim company name Verizon. You can contact Verizon. Verizon give you code. They check mobile details. You have contract with Verizon. Pay due money to company. They can give you code.

---
Tags: sim-unlocking, verizon
---


# Question
Title: How to make sparse image file from original firmware?
I accidently erased `/system` partition and now have my Gionee S10C phone bricked.

I downloaded original firmware, but I can see series of system image files.(This firmware is to be used by Qualcomm Flash Image Loader)

```
system_1.img, system_2.img, ..., system_53.img

```

When I'm trying to install the original firmware using QFIL by putting the phone in EDL mode, I get `sahara fail error`. (Same error in here and I tried most of the fixes I can find, but nothing works)

Now, is there any way to use the above 53 system images to restore my phone using `fastboot flash` command?

I'm sure only `system` partition is needed to be restored to get my phone working again, because I haven't modified any other partitions.

# Answer
> 3 votes
concatenate files with dd seek=$offset from xml and then sparse with img2simg

`rawprogram0.xml` contains

```
- partition name:    filename="system.img"
- partition size:    num_partition_sectors="8388608"
- partition offset:  start_sector="1312768"

```

`rawprogram_unsparse.xml` contains system\_1.img - system\_53.img

```
- file name:         filename="system_1.img"
- file size:         num_partition_sectors="262160"
- file offset:       start_sector="1312768"

```

Note: we don't want the offset so we will subtract from `start_sector`

1312768 - 1312768 = 0

```
- file name:         filename="system_1.img"
- file size:         num_partition_sectors="262160"
- file offset:       start_sector="0"

```

1576968 - 1312768 = 264200

```
- file name:         filename="system_2.img"
- file size:         num_partition_sectors="16"
- file offset:       start_sector="264200"

```

1581024 - 1312768 = 268256

```
- file name:         filename="system_3.img"
- file size:         num_partition_sectors="256048"
- file offset:       start_sector="268256"

```

Now use the **dd** `seek` parameter to paste junks into proper offsets
(sparse is filled with zeros)

`bs=$SECTOR_SIZE_IN_BYTES`
`seek=$start_sector`
`count=$num_partition_sectors`

```
dd if=system_1.img count=262160 seek=0       bs=512 of=system_ext4.img
dd if=system_2.img count=16     seek=264200  bs=512 of=system_ext4.img
dd if=system_3.img count=256048 seek=268256  bs=512 of=system_ext4.img
...
dd if=/dev/zero    count=0      seek=8388608 bs=512 of=system_ext4.img

```

the result is mountable ext4 partition image

```
mkdir system
sudo mount -t ext4 -o loop system_ext4.img system
ls system

```

finally this file can be sparsed with `img2simg`

```
sudo apt install -y f2fs-tools android-tools-fsutils android-sdk-platform-tools-common
img2simg system_ext4.img system.img

```

---

**GNU bash script with sed**

```
#/bin/bash

shopt -s extglob

bs=512
label=system
input=rawprogram0.xml
output=rawprogram_unsparse.xml

source <(sed -nr "s,.*\s(filename=.${label}\.img.)\s.*\s(num_partition_sectors=.[0-9]+.)\s.*\s(start_sector=.[0-9]+.).*,\1; \2; \3;,p" "$input" | head -n1)

out=$filename
off=${start_sector:-0}
end=${num_partition_sectors:-0}

printf '%s\n' "${label}"_+([0-9]).img | cut -d. -f1 | sort -t_ -k2n | xargs -n1 -I_ echo _.img | \
while read -r file
  do
    source <(sed -nr "s,.*\s(filename=.${file}.)\s.*\s(num_partition_sectors=.[0-9]+.)\s.*\s(start_sector=.[0-9]+.).*,\1; \2; \3;,p" "$output" | head -n1)
    dd if="$filename" of="$out" bs=${bs:-512} count=${num_partition_sectors:-0} seek=$((start_sector-off)) status=none || exit 1
    echo "filename=$filename num_partition_sectors=$num_partition_sectors start_sector=$((start_sector-off))"
done

dd if=/dev/zero of="$out" bs=${bs:-512} count=0 seek=$end status=none || exit 1
echo "filename=$out num_partition_sectors=$end start_sector=$off"

file "$out"
e2fsck -n "$out" | grep clean || exit 1
mv "$out" "${out%.*}.raw"
img2simg "${out%.*}.raw" "$out" || exit 1
file "$out"
echo "Done."

exit 0

```

---
Tags: rom-flashing
---


# Question
Title: Non-root backup with multiple users (non-owner or secondary users)
I really did spend some time researching this and was surprised to not find any answers (this great thread doesn't address this problem at all.... I'm trying to recover from my unfortunate situation: I set up a secondary user on my Nexus 7 4.2.2 and my device is not (yet) rooted. Now I like many others realise that rooting will wipe everything in order to unlock (if I had only read that first), and I'm trying to backup all app data for the secondary user.

When I try to run any adb-based backup on the secondary user, it just hangs and then times out, creating an empty .ab file. The owner's user account backs up just fine.

Any ideas? Is the multi user just too new? I have run into other annoying things with it (no VPN client will connect, can't get into developper settings, can't even change the TIME settings, etc...)

Thanks!

# Answer
If you are on Android 4.2.2 there is a way of unlocking the bootloader without wiping the device. Use towelroot to root your device. (It works on a neuxs 7 as long as you have a kernel build \< Jun 3). Afterwards you can use the following app to unlock the bootloader (It doesn't wipe the device). Then you can use titanium backup to backup everything on your device, even when logged in as a secondary user.
> 2 votes

# Answer
It would be helpful to be more explicit in what you're doing, like specific adb commands, although I think I'm running into the same issue.

I believe what's happening in your situation is that you're (unintentionally) taking a backup of the Owner user. Since you are in the secondary user profile, you will not see the prompt to start the backup **for the Owner user**. So adb hangs waiting for a confirmation that you never see.

An important thing to note is that adb sessions always run in the context of the Owner user. So if you are not passing a user id to the backup process, it will be doing a backup of the Owner profile.

---

So how does one initiate a backup/restore to a non-Owner profile? It helps to know that the adb backup and restore commands end up executing `bu` on the system. When you run `bu help` from the adb shell here's the output I get:

```
sunfish:/ $ bu help
 backup [-user USER_ID] [-f FILE] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared]
        [-all] [-system|-nosystem] [-keyvalue|-nokeyvalue] [PACKAGE...]
     write an archive of the device's data to FILE [default=backup.adb]
     package list optional if -all/-shared are supplied
     -user: user ID for which to perform the operation (default - system user)
     -apk/-noapk: do/don't back up .apk files (default -noapk)
     -obb/-noobb: do/don't back up .obb files (default -noobb)
     -shared|-noshared: do/don't back up shared storage (default -noshared)
     -all: back up all installed applications
     -system|-nosystem: include system apps in -all (default -system)
     -keyvalue|-nokeyvalue: include apps that perform key/value backups.
         (default -nokeyvalue)
 restore [-user USER_ID] FILE       restore device contents from FILE
     -user: user ID for which to perform the operation (default - system user)

```

Okay great, so apparently there is a `-user` option. Great! So now I try running a restore for a secondary user from adb and here's what I get:

```
$ ./platform-tools/adb restore -user 11 <path to android backup>
WARNING: adb restore is deprecated and may be removed in a future release
adb: restore requires an argument

```

Okay, maybe its finicky and wants the backup file as the first argument. But this results in the same output. I haven't figured out why adb won't take the `-user` argument.

---

But there's another option, we can run `bu` directly from the adb shell. Unfortunately, I've yet to get this to work either, but I get farther along. I first upload the backup to the Owner profile and run `bu` from the Owner profile using the adb shell. I know of no way to get an adb shell on a non-Owner profile. This shouldn't be a problem though because that's what the `-user` argument is for. I've tried two scenarios to no avail.

1. Run `bu -user <uid> <backup file>` while logged in to the profile of that uid, in this case uid 11. I see no restore confirmation prompt or anything visually happen. Here are relevant logcat lines:

```
03-14 17:58:29.286 11753 11753 D AndroidRuntime: Calling main entry com.android.commands.bu.Backup
03-14 17:58:29.288 11753 11753 D bu      : Beginning: restore
03-14 17:58:29.289  1493  1731 I BackupManagerService: [UserID:11] Beginning restore...
03-14 17:58:29.289  1493  1731 D BackupManagerService: [UserID:11] Starting restore confirmation UI, token=30388736403-14 17:58:29.289  1493  1731 I ActivityTaskManager: START u0 {act=fullrest flg=0x20000000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras)} from uid 1000
03-14 17:58:29.289  1493  1731 W ActivityTaskManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent {act=fullrest flg=0x20800000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras) }
03-14 17:58:29.293  1493  1731 D BackupManagerService: [UserID:11] Waiting for restore completion...
03-14 17:59:29.388  1493 25093 I BackupManagerService: Full backup/restore timedout waiting for user confirmation
03-14 17:59:29.388  1493  1731 I BackupManagerService: [UserID:11] adb restore processing complete.
03-14 17:59:29.388 11753 11753 D bu      : Finished.

```

As can be seen, the BackupManagerService knows that I'm requesting a restore of uid 11. Also it says its starting the confirmation UI, even though I see nothing come up. Eventually the requests times out.

2. Run `bu -user <uid> <backup file>` while logged in to the Owner profile. Here are relevant logcat lines:

```
03-14 18:00:39.448 11948 11948 D AndroidRuntime: Calling main entry com.android.commands.bu.Backup
03-14 18:00:39.450 11948 11948 D bu      : Beginning: restore
03-14 18:00:39.451  1493  2786 I BackupManagerService: [UserID:11] Beginning restore...
03-14 18:00:39.451  1493  2786 D BackupManagerService: [UserID:11] Starting restore confirmation UI, token=606614021
03-14 18:00:39.451  1493  2786 I ActivityTaskManager: START u0 {act=fullrest flg=0x20000000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras)} from uid 1000
03-14 18:00:39.451  1493  2786 W ActivityTaskManager: startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { act=fullrest flg=0x20800000 cmp=com.android.backupconfirm/.BackupRestoreConfirmation (has extras) }
03-14 18:00:39.459  1493  1994 W ActivityTaskManager: Tried to set launchTime (0) < mLastActivityLaunchTime (22366588)
03-14 18:00:39.462  1493  2786 D BackupManagerService: [UserID:11] Waiting for restore completion...
03-14 18:00:39.572  1493  1757 I ActivityTaskManager: Displayed com.android.backupconfirm/.BackupRestoreConfirmation: +112ms
03-14 18:00:43.431  1493  5565 D BackupManagerService: [UserID:0] acknowledgeAdbBackupOrRestore : token=606614021 allow=true
03-14 18:00:43.432  1493  5565 W BackupManagerService: [UserID:0] Attempted to ack full backup/restore with invalid token
03-14 18:00:46.213  1493  2063 D InputDispatcher: Waiting to send key to Window{200410c u0 com.android.backupconfirm/com.android.backupconfirm.BackupRestoreConfirmation} because there are unprocessed events that may cause focus to change
03-14 18:01:39.563  1493 25093 I BackupManagerService: Full backup/restore timed out waiting for user confirmation
03-14 18:01:39.563  1493  2786 I BackupManagerService: [UserID:11] adb restore processing complete.
03-14 18:01:39.564 11948 11948 D bu      : Finished.

```

As in the first attempt, we see that the BackupManagerService is trying to do a restore for uid 11. It starts the confirmation UI, which does pop up. I then confirm the restore. But then we see that its uid 0 which confirms the restore and I believe that's why the resulting token is invalid. Makes sense, why should one profile be able to cnofirm the backup/restore of another? (make a little more sense for the Owner profile to be able to do that)

So I think I've hit a roadblock here. I'm not sure how to get the confirmation UI to run in the correct user. I suspect this has (still!) not been tested by the android community, though why have a `-user` option at all?

---

Here are some other log messages that may be clues to a way forward:

```
03-14 18:00:28.422  1493  5597 W WindowManager: Attempted to set replacing window on app token with no content Token{b3c5879 ActivityRecord{23cb9be u0 com.android.backupconfirm/.BackupRestoreConfirmation t1100006}}
03-14 18:00:28.610  1493  2786 I ActivityTaskManager: Activity reported stop, but no longer stopping: ActivityRecord{23cb9be u0 com.android.backupconfirm/.BackupRestoreConfirmation t1100006}
03-14 18:00:37.042  1493  2063 D InputDispatcher: Waiting to send key to Window{6f7d966 u0 com.android.backupconfirm/com.android.backupconfirm.BackupRestoreConfirmation} because there are unprocessed events that may cause focus to change

```
> 1 votes

# Answer
I don't think there is a way short of finding a root enabling exploit. `adb backup -apk -shared -all` only backs up for user 0 for both /data/user/ and /storage/emulated/ (For non devices without expandable storage). No luck with 4.4 either.
> 0 votes

---
Tags: backup, adb, 4.2-jelly-bean, multi-user
---


title: Why is my tablet storage almost full?

text:
# Question
Title: Why is my tablet storage almost full?
My Galaxy Tablet 10.1 has almost 14 GB of storage. Currently, it's about 13.5 GB full of stuff, but I have no idea what. Recently, when I have tried to install some apps, I get an error saying there is not enough space.

I have tried to clear out all unneeded apps, and cleared the data from apps I do have. For example, the Firefox app had the most data, at about 100 MB, so I cleared it out, but the difference was negligible. All my downloaded apps combined are nowhere near 1GB in total.

My device is rooted, and I have ES File explorer, so I went looking to see if there were any log files taking up space, but after extensive searches, I can't find any log files more than a few kilobytes in size.

I can't figure out what is taking up all the space on my tablet. How can I clean it up?

# Answer
> 1 votes
If you go to storage in settings, you can see a basic breakdown, I'm guessing apps wont be the biggest, however look to see if pictures and videos; audio; downloads; cache or misc. is taking up a lot of space and click on the relevant entry to have further actions (clearing cache, deleting downloads, etc..).

If this option isn't available in settings (it is in aosp, but may not be in touchwiz), try searching the play store for a comparable app (see @user284oo6).

# Answer
> 1 votes
**The entire Android System is extremely Storage Intensive.**
When trying to understand the seriousness of the dilemma, you must investigate how Android takes up so much compared to other operating systems.

Let's begin by looking at the very first stage of Android - Booting.

Here we can see that the Entire Animation on Start-up is actually a ZIP folder filled with Images - if you compare this to Windows using a simple BMP image - you'll start to see how the simple boot animation can take over 100 times the space requirements.

NOW we'll look at a single applications images,
Each APK file has every image it needs inside the RES folder of the source - this RES folder seperates all Screen Sizes on Different platforms

As you can see, Android uses a seperate folder of images for every single screen size - comparing this to other software platforms, you can see that this takes about 14 times the space compared to Resizing Larger images with scaling.

This is built-in as the default programming option, however you can just resize the images in runtime.

THESE 2 Examples should bring light to the way Android handles storage space requirements.

# Answer
> 0 votes
Clear the cache in settings \>\> storage then try. Sometimes Google Play will stop apps from installing when you have low space but if you clear your cache then you should be crime until you have to clear it again or when you actually run our of space.

# Answer
> 0 votes
If nothing helps, please consider your deleted items might went to **Trash** so you thought you delete some files, but those are moved to Trash on your Android device. To clean your Trash and set nothing goes there or choose the holding duration:

To check the Trash on your Android device:

> 1. Go to **Gallery**
> 2. Click on three dots on top-right corner
> 3. Click on **Trash**
> 4. Click on **Empty** on top-right corner
> 5. On pop-up section, click on **Empty Trash** with some items will be permanently deleted. (Be sure if you want to delete them really)

To set **Trash** duration to delay the delete procedure:

> 1. Go to **Gallery**
> 2. Click on three dots on top-right corner
> 3. Click on **Setting**
> 4. Advanced \> Trash \> de-activate as gray color (Keep for 15 days e.t.c.)
> 5. Turn off Trash, all set.

# Answer
> 0 votes
I found large unnecessary files in: \[...MyName\]\Android\obb\com.ea.game.nfs14\_row - there were two large files each almost 1 GB \[such like main.1420.com.ea.game.nfs14\_row.obb \] Did it by connecting tablet to computer, and checking all hidden files. At first tried clear cache, clear big files (audio, video) but nothing helped. Even did not understand which files take such size because system shows little app size. Blame my five year old for installing and reinstalling too much apps :)

# Answer
> 0 votes
You can take backup and erase data. When I did this on android 10. It free up around 4 Gb.

You can backup WhatsApp and photo on google. You can get free space.

---
Tags: storage, tablet
---


# Question
Title: Source code for Android programs and applications
How do I view the libraries, directories, source files, etc... for Android programs and apps. Obviously file viewer doesn't show nearly what I am looking for. 8ts all open source, so why can't I access them?

# Answer
> 1 votes
Open source does not mean that the source is included in the Android app. An APK files never contains the code in compiled form. Some time sit means that the source code can be downloaded somewhere on the net.

Usually nowadays you can find the source code of an open source on on one of the three most popular platforms:

Typically the project page is linked on the \[Google Play\] store web page of the app.

---
Tags: file-management
---


# Question
Title: WhatsApp web won't stay online unless the application is open on device
I'm using WhatsApp on my phone and desktop, and for some reason it has started booting me out of both unless I am in the phone application

# Answer
> 1 votes
Remove all Computer connected in your device and go through same process and now this time please check whether there is checkbox or not under QR Code Similar to This

# Answer
> 0 votes
This is the way it is meant to work. When it the app is minimised, it will run in background but won't show you as online. All messaging apps like allo, WhatsApp, hangouts do this. This is not a problem or a bug.

# Answer
> 0 votes
You have a setting in your phone that kills any closed app instead of keeping it in the background. I don't remember exactly how to find it and it probably varies with different phones, but it certainly the issues and not something wrong in WhatsApp app itself.

# Answer
> 0 votes
keep me sign in never make WA destop open. so make sure to make whatsapp on phone always on/ force app to stay open. so WA destop will always open too

# Answer
> 0 votes
I had this problem on my Samsung. It seemed, interestingly, to be related to the fact that I didn't give it Phone and/or SMS permissions. Once I enabled those (Settings -\> Apps -\> WhatsApp -\> Permissions) the issue went away.

# Answer
> -1 votes
Check whether you have activated restricted data usage in Settings -\> Data usage depends on phone.

---
Tags: whatsapp-messenger
---


# Question
Title: What are the alternatives for Xposed framework on Pie? Preferably without triggering Safety Net?
Xposed development has been in a limbo with the last update being a beta released a year ago.

Die hard fans of Xposed hesitate to upgrade Android, in the absence of Xposed support.This is true for the latest Android Pie as well. Magisk is useful but cannot replace Xposed for deep stuff. Yet another concern is Safety Net getting triggered when Xposed framework is installed through Magisk.

What are the alternatives available? Preferably without triggering Safety Net?

*Note* :

1. This is a self answered question to share my recent foray into this after upgrading to Pie.
2. Moderators are welcome to make this a wiki Q and A if it attracts more updates or if deemed fit.

# Answer
*There are significant changes in Magisk /EdXposed drivers which are updated here* How to install EdXposed on Android 10 without triggering safety net

*Please refer to updated installation instructions*.

---

\*Alternatives to Xposed (rovo89) are:

* Virtual Xposed \- a rootless Xposed and therefore far less capable. I didn't investigate further for this reason but I read that development on this has stopped (unconfirmed).
* Tai-Chi Xposed by the same developer of Virtual Xposed and supports Android Pie. Said to be close sourced and likely to be paid module per some reports.
* Edxposed. This is the alternative I chose.

*Disclaimer*: I am not a developer nor am I affiliated to any app or module.

# Is it safe?

**Yes**

For an average user like me, two factors help decide:

* **Open Source Vs Close Source** Edxposed is Open source. I have no understanding of code and cannot draw any conclusion from looking at code. But yes, being open source means it is subject to scrutiny by knowledgeable folks and therefore safer (Please don't drag me into open source discussion, rather post an alternative answer :).
* **Provenance or trust attached**

+ The last Xposed update by rovo89 is also close sourced (as against earlier versions which are open source). This being close source would not have detracted people from using it purely based on developer's reputation.
    + In the case of Edxposed, my trust lies with Marcel (aka M66B) who has developed several privacy centered modules / apps such as NetGuard, Xprivacy, XprivacyLua and FairEmail. For me, when a staunch privacy advocate like Marcel starts development using EdXposed(edit-completed development), that's pretty much sovereign guarantee despite some warnings about close source (Incidentally, this claim is incorrect and a Reddit user informed XDA portal. To clarify again, it is open source)

# Is it as good as Xposed and can I use all Xposed modules?

* It is not (yet) as powerful as Xposed because it lacks support at this stage for *resource hooks* but it may get added hopefully.
* It is still in beta stage but a lot of modules work already. See \[Updated\] List of Xposed modules for Android Pie working with Ed Xposed Framework for a list of working and non-working modules which is being updated. Take this list with a pinch of salt - it may mean anything from doesn't crash and works partially to fully works. See last question below.
* For me XPrivacy Lua works and works far better on EdXposed than on the beta version of Xposed on Oreo. Another must module for me is Maxlock which works fine. Only one I want is GravityBox and C3C076 , developer of GravityBox is considering development for EdXposed and it is likely others follow suit.

# Does it pass Safety Net?

**Yes** :)

# OK, how do I install it?

**Check for updates from corresponding links below as they would change being a beta. Valid as on 12 Feb 19 and will not be updated in this answer**. See How to install EdXposed on Android 10 without triggering safety net for a more recent method

**Source** Android 9.0 uses xposed solutions as updated

Use Magisk order to install these modules in the *same order* ( You won't find them in the magisk repo. Download them and from Magisk Downloads option click on the **+** to install and they will appear as Magisk Modules)

1. Magisk-riru-core-arm-arm64-v10.zip
2. Magisk-EdXposed-arm-arm64-v x.x\_beta-release.zip
3. Don't reboot yet , install ~~XposedInstaller\_by\_dvdandroid\_19\_10\_18. apk or from XDA~~

magisk-EdXposed-v0.2.9.8\_beta1-release.zip (check for updates in subsequent releases)

4. Reboot.

# Does it work on modded UI's like that of Samsung , MiUI, Poco etc?

Traditionally XPosed always had a problem with such devices but EdXposed seems to fare better. Issues with some devices are reported so YMMV (check out the linked XDA thread)

# List of modules that are fully optimized?

Developers would need to upgrade their modules for working with Pie AND EdXposed. As of now, the following modules meet these requirements

**Notes**

* You may need multiple reboots.
* Ignore the warning on the installer *Xposed not yet compatible ...with SDK 28...or your Android architecture (see pic below)*.
* You may find at times that installer is disabled - reinstall and reboot to fix. For some , *soft reboot* from installer fixes the problem (root permission needs to be given for installer).
* Whenever Installer is upgraded, it is better in my experience to uninstall the earlier installer and install the newer one to prevent instability
* Your device may be noticeably slower to respond - that's a price to pay till things stabilize.
* Some modules may work with earlier versions of Edxposed and not with later versions or vice-versa.
* **Pro-tip** Just in case you land up installing a module that ends up in a boot loop or creates some other problem , it is handy to have \[Tool\]\[2018.8.1\] Magisk Manager for Recovery Mode (mm) installed so that you can disable or uninstall the Xposed modules from Magisk.

Screenshots are from my MiA1 (Android one) running stock OS with latest Magisk 18.1

(Click to enlarge)

Happy Xposing !
> 26 votes

# Answer
Relatively new entries on the scene are SPatch (Beta) (tried) and perhaps a lesser popular Xpatch.

**What is SPatch ?**

> Let devices without root or bootloader unlock to use Xposed framework! SPatch is a new root free Xposed framework, also available for devices not unlock bootloader. Support both ARM(SandHook) and X86(SHook, for Android emulator)

System requirements: Android 6.0+ (Support Android 11) 256MB ram or more 128MB free disk space

**Usage**

Spatch has some kind of Virtual xposed look and feel and overall functionality is almost similar though the former has extra tweaks for pro users plus users can install SPromoter (a helper app) for module management

> 1. Open SPatch app and wait until password activity appear
> 2. Input zero four times, then long press D button
> 3. Click visit button, remember numbers that pop up from the top of window, then input the numbers you remember
> 4. Click M button for Xposed or Cydia modules injecting, V for virtual machine, T for hack tools, rest of all for your explore
> 5. Click add button for add application you installed or apk file in internal storage, wait for action finish then reinstall or install application. Application you add by SPatch will load all Xposed modules you installed. You can use SPromoter for module managing.

**What is Xpatch**

> Xpatch is a jar tool which is used to repackage the apk file. Then, the new apk can load any Xposed modules installed in the android system.
>
> This is a way to use Xposed modules without root your device.
>
> It is easy way to modify one app using xposed module. And any apps changed by Xpatch can load every modules downloaded in the Xposed Module Repository.

Haven't used Xpatch but from the developer page, the usage instructions are provided:

**How to use**

> 1. Download the latest jar file from the my github release page.
> 2. Run this command in the Windows/Mac console:
>
> `$ java -jar ../../xpatch.jar ../../source.apk`

Basically the main idea here is that a new apk is produced in the same folder as source apk.

This apk can **load any xposed modules installed** in the device.(Support up to Android 11)

Learn more here

Xpatch source code: https://github.com/WindySha/Xpatch
> 2 votes

---
Tags: 9.0-pie, xposed-framework, safety-net, edxposed
---


# Question
Title: How do I change from "Unknown" to show who is calling me?
I'm using Samsung Galaxy Mini S3. When one of my contacts calls me I see "unknown" on the screen.

How do I change it to show who is calling me? It used to be something that has changed.

# Answer
> 3 votes
Normally, it is the person calling you that chooses to call as unknown. Even if it is someone you know and that person is in your contacts, if they have their caller ID turned off, they will appear as unknown on your device.

However, if this happens for every single one of your contacts calling you, I doubt that it is them having their caller ID turned off. If their number appears, but not their name, then caller ID **is turned on** and it is your phone that is causing problems. Check if your accounts are synced and your contacts have their names set to the correct phone numbers.

If no number appears, no caller ID is coming through. I've heard about this problem before, and probably the problem is not your phone, but your service provider. Try contacting customer support and explain your problem to them. They should be able to help you further by enabling caller ID from their side.

# Answer
> 1 votes
you may have the contact linked to an "unknown" contact. You'll need to unlink the two contacts and it should populate with the name on your contacts.

---
Tags: contacts
---


# Question
Title: Is there a way to copy files directly between two Android devices on the same wifi network?
I now have a *Samsung Galaxy S* Android phone running Froyo 2.2.1 and an *Archos 101* Android tablet - also running Froyo.

**Both are 'connected' to the same home network via wifi.**

Is there a method by which I can **copy files directly between the two devices** using Wifi?

Bluetooth is also an option, but since I want to copy a lot of thumbnail images, I think this is too slow.

---

**UPDATE**

*The solution I choose:*

I managed to copy files using the **ftp** protocal , using **swiFTP** as ftp server on my Archos table, and using **Ghost Commander** on my Samsung phone.

If you want to try something similar: you might look at my comments to the accepted answer on my other question: **question about a 550 error I received during my initial ftp testing** in order to see what I had to do to make it running.

# Answer
There seems to be multiple options available. With a relevant internet search there is an application called **Bump** which shares files by simply bumping both devices together. I'm not sure if it does it over wifi if available or only does it over 3G.

There is another option where you can set up an ftp server on the device using an application called **SwiFTP** which is not being maintained anymore but the last update was June 2010. You can install this on one device and use ES File Explorer on the other device to compress and upload the file it using the FTP option.

A third option would be use **Hoccer** which probably uses their service as dropbox does, though I can't be 100% sure.

I'd personally recommend the ftp solution since that seems the most straight forward and you get to ensure that you have a direct connection.
> 6 votes

# Answer
I would suggest using DropBox. The interface let's you upload or download files on an Android device. Additionally you can manage the files from any computer with DropBox installed on it. I've been a big fan of using DropBox on my Droid 1 :)
> 5 votes

# Answer
How about good old FTP?

There are a lot of ftp clients (some filemanagers support it, too) and also some server apps (e.g. SwiFTP).
> 3 votes

# Answer
WiFi Direct is supposed to allow device to device communication. It is a new standard that should be showing up on wifi device soon (not sure when manufacturers will be supporting this). Here is a list of devices that have been certified, not all phones. My guess is that when an app is released that takes advantage of this, there will be news on Engadget or some other place.
> 1 votes

# Answer
**ES file explorer.** This app lets you send any size file over bluetooth, wifi(hotspot or local wifi) etc. Very easy to use, just connect both to same wifi hotspot, select the files to send

(OTHER PERSON(s) MUST HAVE ES FILE EXPLORER OPEN)

and press send, or share (the device share menu) and then select via LAN with the ES icon.

You can send file to multiple people at once
> 0 votes

# Answer
In 2021 you can do this from Google's "Files" app directly. It has simple "send" and "receive" buttons and sets up peer-to-peer WiFi temporarily and securely with zero configuration hassle.
> 0 votes

# Answer
Brilliant app this - Sharable. All others require internet and data costs - including Bump. Also there is no way you could transfer huge files (full length videos or high quality clips) via other apps. Cross Platform support is amazing. Android, ioS, Mac and PC all supported. Pretty fast as well.
> -1 votes

---
Tags: wi-fi, sync, file-transfer
---