This might not be an appropriate question for StackOverFlow. If not please recommend me where I can post this question.
We are in the process of developing an application where the customer can call the vendor and the vendor can call the customer. But for privacy reasons we don't want to expose the phone numbers of the customers to the vendors and vice versa.
What are some recommended solutions for this problem?
It's not possible, the URL Scheme requires a number and it is show on the screen while calling.
as you can see here
Maybe, you may have to create something more complex like Skype.
Unfortunately that is not possible as of now. You could hide the phone number by replacing each number as an asterisk (*) in your app.
However, when vendor or customer taps on the phone button to call, then phone number is passed to the device Operating System to call, then this number will show up in the calling list.
In addition to that, your app most likely will not be allowed by Apple reviewers, because user needs to see what phone number he is calling. He might be punished if he keeps calling this secret/scripted phone number which might be 911. That is another serious issue may rise.
My recommendation is to have chatting system, or implementing VoIP(voice over IP) like whatsup or viber style calling within the app. It requires exhausted implementation.
Related
I'm developing an app that will send very infrequent SMS messages from a foreground service. By very infrequent we're talking a few times per year at most, if the app is not severely misused by the user themselves.
I tested it the other day on a real device, and up popped a dialog that said something along the lines
AppName is trying to send an SMS.
Do you want to allow this?
Accept Decline
[ ] Never ask again
I don't remember the exact phrasing, and I haven't been able to reproduce it. I wouldn't swear on it, but I'm fairly certain it was on a device running Android 4.4.4.
This was the first time the app tried to send an SMS on this device, so I don't really think that it is related to SmsUsageMonitor.isUnderLimit(). Are there an other security checks and whatnot that would apply to sending SMS from a foreground service (including all versions of Android, not just 4.4.4)?
SmsUsageMonitor seems to do some checking for "premium" numbers, and might possibly require some form of user acceptance in case an app tries to send a message to such a number. If this is the case, is there any way to "pre-approve" my app for sending to any number - including premium ones
- once and for all? Or could manual user approval still be required some time in the future, if for example a new recipient number (which might be a premium number) is used?
It seems I was able to reproduce this after changing the package name of the app (uninstalling didn't help). This is indeed related to premium number - or rather what SmsUsageMonitor considers to be premium numbers.
For me, in Sweden, it seems like numbers that have 5 or fewer digits and are not emergency numbers (like 112) are considered to be premium numbers. This is somewhat backed up by Wikipedia on Short Codes
Sweden
Codes are five digits in length.
This is the dialog that pops up. After checking "Remember my choice" and clicking Send, the dialog doesn't appear anymore. The setting can be changed in App Info, where there is a setting called Send Premium SMS.
Hey does anyone know if it's possible to intercept incoming calls via an app for both IOS and Android (no jailbreak) then based on certain criteria the phone takes action?
Have already read a few posts saying it's not possible however they are quite old, anyone know of anything new?
Thanks!
The short answer:
On Android: You can do this, but this may require special treatment for different vendors and/or OS versions. It won't be simple to support all (or at least most) devices, but with a lot of manual trial and error, it can be done.
On iOS: It's not possible locally, as Apple sees it as an invasion to the user's privacy.
The (slightly) longer explanation:
What is possible, for both iOS and Android, but will probably require a lot more work and external support than you originally planned, is to divert the calls via a server. This way, when someone calls you, the call is "stolen" by the server (which the user has to manually allow when installing the app) and the call is received on your device as a VOIP call, allowing the app (on the server side) full control over the call (which ones are actually received on the device, what's played, how long, recording, etc). You can see this app for an example of how it works: https://yallo.com/.
I hope this helps. Good Luck.
I'm trying to get an idea of what's possible and what isn't in terms of using a custom dialler app for internet calls.
The idea is that the standard Android dialler be used when no internet connection is available, but use a custom-written VOIP dialler / caller app whenever an internet connection is available.
I see that in the Android call settings you can set it to use Internet calling whenever a connection is available. How does this work? Does this simply tell the native dialler app to use internet calling, or is there actually a specific Intent or something that gets fired when an internet call is made so that I can open my custom SIP app?
And also, is the 'standard phone app' icon always linked to the standard phone app, or can you override this phone icon to open your custom VOIP app when a connection is present?
So basically, is there a way to seamlessly and automatically switch between the standard dialler and the custom SIP dialler based on whether or not the phone is connected to the internet?
If not, is this something that could be done by customizing Android?
Thanks,
There are four possible ways of doing what you want that I know of:
1. Replace the Android Dialer
This is hard and a lot of work. The Android Dialer (last time I checked anyway) WAS the telephony stack in Android. So to replace it you have to replace the complete telephony stack (including any public API) i.e. handle all cellular (and now sip) calls in and out of the device. Also the only way to replace it is to root the device as it can't be replaced normally.
2. Provide your own Dialer that is separate to the main dialer.
This has it's advantages that you will never get into "trouble" with anything else.
3. Hook into the outbound call API (ACTION_NEW_OUTGOING_CALL)
This is something that is pretty cool and I haven't seen any other OS allow you to do. Basically you can trap when either the normal dialer starts to dial a number (or when another application starts to dial a number as well) and you can either allow it through, modify it or cancel it. Behavior I've seen from sip clients is that they will cancel the call and put up a selection screen prompting where you want to send the call (sip, cellular or something else).
Here is an example of it's use.
The downsides are:
You can be fighting with other applications to which gets first go. There is a 'priority' setup, but all I've seen is everybody wants to be number one.
On some Android devices where the OEM providers that own Dialer, they don't always fire it!!!
4. Detect when the dialer is shown and show your own dialer in front of it.
This works and does allow you to provide a nicer more integrated feel as you can provide call type selection within the dialer, as well as other custom number lookups but that can be a little tricky to do on some devices.
I would suggest 3 to begin with as it's pretty easy to do and you can get something up going pretty fast. In code that I have worked on, we have done 2, 3 and 4 and also looked into 1.
I am wondering if there is a way to send a message to users that have entered your wifi's reach? I am not sure if this is possible or how it's called.
A hint of what to look for or some sample code (if this is possible at all) would be much appreciated!
The only thing that is possible as far as I know is to add software to your accesspoint to do a splash screen (or possibly a login page).
This would not completely solve your use-case, but like the various "free" wifi in bars you do need to log in to first, you need to open a browser first and perform an action, before you have a real connection.
You could just skip the authentication-part, and put your message on the splash screen.
A random example of what you can find on the internet is this: http://www.dd-wrt.com/wiki/index.php/NoCatSplash
I have no experience with it, but it seems to serve above mentioned purpose, and you can easily go from there.
I am aware that this is NOT an android specifi answer, but as far as I know it is not an android specific question: you want to send a message to people connection to your wireless.
I am starting an application for child monitoring. This would involve mainly the logging of the SMS messages sent and received and logging other activities that may be of interest to the parents. It will also be nice to have something like access control lists for these, too.
Now, as far as I know:
It is not possible to make an app "not uninstallable".
It is not possible to prompt for a password to uninstall an app.
It is not possible to assure that your app is "always" running even if it's getting killed with something like Task Killer, although I think you can respawn the application at given time intervals.
So, any ideas on how to overcome these problems?
There is no way to work around these problems directly without creating your own build of the Android OS. Android always assumes the current user is the owner of the phone and should always be allowed to do whatever they need to do.
It's easy to see why the functionality you need isn't available if you replace "child monitoring" with "malicious data logging" in your question; if Android allowed an app to prevent the user from removing it, it would clearly be open to abuse.
The only thing I can think to do is to have your keep a log of when it is running. This would allow a parent to seen when the app had been running when they viewed the log of the collected data. So if the child had disabled the app the parent would know, but they wouldn't know what had been missed. Although you'd had to be able differentiate between when the phone was switched off and when the app just wasn't running which might not be straightforward.
What you said is true.
Also remember that applications like Task Killer have some sort of blacklist/ignore list so re spawning your app might not make it work.
PS: Without a rooted phone, there is no way you can save your app from a geek kid :)
I was thinking about writing a similar app and considered the same exact scenario. "What if the kid uninstalls the app?"
The only solution I was able to come up with was to have the app periodically ping a server with the a unique ID. Affectively having the app "Check in" with the server a few times a day. Kind of like when prisoner goes on parole. The app is the prisoner and the server is the Parole officer :)
If the app misses a checkin you could treat this as a potential uninstall. However, this could be caused by a lack of network connectivity. I'm sure you could come up with some interesting ways to flag and treat missed checkins. Maybe you could have the app send an SMS checkin or something instead of over HTTP. Then you wouldn't have to depend on Network connectivity.
Once you figure out how to translate missed checkins to an uninstall, you could shoot out an email to the interested party (i.e. the kids parent).
With this option in place, the parent can then have a "Conversation" with their kid before giving them the phone. Something along the lines of:
- "This phone's got parental controls on it. Yes, you do have the ability to uninstall them. However, if you uninstall them I'll know about it and I'll take the phone away."
I think there's definitely a market for this. Need some type of web-interface/dashboard for that parents can log into for monitoring too.
Hope this helps & best of luck.
Cheers!