I am creating an app and would like to add a feature. What I want to do is be able to detect some sort of input code from another phone. For example, if phone A has my app and is talking to someone on phone B, if the person on phone B inputs a predetermined code, the app on phone A will do something.
Phone B ---> input code ---> app on phone A takes action
The app on phone A will be running in the background when it receives the input.
If this is not possible, then I have already found ways to do this with a text message using a BroadcastReceiver.
Here is a DTMF recognizer: http://code.google.com/p/dtmf-decoder/
No idea how ripe the project is. But it may be a source of inspiration for you :).
Related
I am trying to do something like the picture below of just eat app using android studio. I am yet to start building my app but I would like to know how to implement getting user postcode and showing it in the edittext field. Any help will do.
![img1] https://drive.google.com/file/d/186D7fjSvJOhEQdep_fU4dnkUGV-Yi8Ya/view?usp=drivesdk
If you are looking to allow users to identify their post code from their address you might find the Post Office Adress File (PAF) useful although this is a paid for service.
https://en.wikipedia.org/wiki/Postcode_Address_File
https://www.royalmail.com/business/services/marketing/data-optimisation/paf
Some developers may be able to get free sample data for developing their application
https://www.poweredbypaf.com/access-to-free-paf-sample-data/
If you want to allow users to graphically find their postcode e.g. by clicking on a map you would need a map which returns a National Grid Reference and then use Codepoint data (https://digimap.edina.ac.uk/webhelp/os/data_information/os_products/supporting/codepoint_guidance.htm) which is also (an expensive) paid for service to find the nearest postcode co-ordinate using some data structure e.g. quadtree. This will not work correctly in all cases as post code boundaries are not always convex.
Hope that helps
I am currently making an android app for a friend who is a photographer where he will display his images in a RecyclerView. We would like to have sort of like a "like" feature where they can like his pictures. My question is, how would I keep track of the "likes"? What I mean is, how can I make it so that if someone already liked it, they cannot exit the app, come back and like it again? I thought about adding a +1 every time there was a like to the image properties in a database, but how can I keep them from exiting the app, coming back, and liking it again? TIA!
your problem is just a matter of identity. To achieve your goal, you should have a way to identify every piece of the pictures and each of the person who will give up-votes to these pictures.
If you can identify different pictures and different users, you can achieve your goal by either of the following ways:
For each of the pictures store all the users that have liked it. And every time a user want to like a picture, you should check whether he is in this collection or not. Only add the identity of the user to this collection if he is not in this set which means he did not like this picture before
Or you can store all the pictures that are liked by the user.
Which way is better depends on your other use cases.
To identify your pictures you can just assign a distinct name for each of the picture.
So you can see the key problem it how to identify your users.
Since you do not provide a detailed use case of the like action, I will describe some general ideas.
If you have a server
If the user must login, you can identify your users by their login id
If your user do not need to login, you can use some other information to identify your user for example their device id, MAC address or other device-specific indentity.
If you do not have a server, then how can you identify all the users that use the same device? The only way I can come up with is that, you must implement a local user system and ask the user to log in before they want to like a photo.
If you have so signing in users my guess is that you can't. You could save on a hidden file on the device the ids of the photos the device "liked" but this can be easily deleted if the user deletes the apps cache files or uninstall/reinstall.
Not an android expert here, just mho
With login:
In your Database there are "User", "Image" and "User_like_image"
You just have to check if this user didnt already upvoted the image
without login:
You locally store the ID of every images he upvoted
A rough idea: with each item that can be liked store a list of ids that liked it on the server. Your like count is equals to the list length.
On each device generate a random device id token (UUID.randomUUID() is always a good candidate), persist it locally on the device (e.g. in SharedPreferences - wiping the app data will kill it but that can't be solved reliably) and send it to the server with each request.
The server can now
tell you whether you already liked an image which is nice to see on the device and
reject multiple likes from the same device
A simpler approach: store locally in e.g. SharedPreferences that you liked the item. Then behave nicely and don't send another like request to your server backend when you see that you already did. Can be abused because it relies no the client software to be nice but I doubt a small photographer app needs to care too much about that.
A more elaborate approach: require user accounts. That works accross devices and persists through app uninstalls. People that go far enough to create multiple accounts to vote multiple times can't be stopped anyways. The big downside is that people will most likely not want to have another account just to like some photos. Would not recommend if avoidable.
What I did to avoid having people like the same item twice was:
Have 2 states with the same button. If you clicked on "like" the button state changes to "Remove Like" Save the state of the button in shared prefs and check the state before a click is given.
Example:
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
String ButtonText = button.getText().toString();
if(ButtonText.equals("Like"){
//code for Like
button.setText("Remove Like");
}
else{
//code for remove Like
button.setText("Like");
}
}
});
Assume that there are two computers, two headsets with microphone.One PC (A) is having a user and one PC (B) does not have a user, but it is having a software which makes automated calls. Now B making a call to A and Playing something like "Please say 'DONE' if you already in your seat." Then A response for it by saying "DONE". Now here what I want to do is, When that person response it comes to the speaker as incoming audio.I want to make that same incoming voice as the input for microphone. because my voice recognition software only convert microphone inputs to words.
If someone understand my problem please reply/advice me. Upto now I used a windows function in my sound card (Listen to the device), but as the solution its not worthy since that voice is not clear and voice volume not enough for voice recognition.
Thank you.
I wanted to learn more about the Android Services / Broadcasts, so I started a simple project, to create a battery monitoring app. It turned out pretty good, I'm using it for a few days now, but I want to add a new function: to show since when is the phone charging/discharging.
First I thought that I would create two static fields in my BoradcastReciever extension class, where I get and publish the data about the battery, one for the actual state (charging/discharging), and one for the time, when the change in state happened. This way, I could just subtract from the current time the last change, and know exactly since when is the phone charging/discharging.
But there is a problem with this solution: It won't show the correct data at first, when a user starts the app. I wouldn't make a big deal of it, but I saw that Android tracks this data somewhere, because inside my phone settings I found this information, so why take the hard way.
So my question is: is there an easy way to get from the Android system the date/time (no matter what format) of the last charging state change?
I looked at the BatteryManager reference but there are no constants named after what I seek, and which I could use, to get the information from the Intent of my receiver.
The Android OS tracks the connect/disconnect of a power source, but does not make this data accessible to apps. You have to record this all yourself, using intent filters.
The two intent filters to use are android.intent.action.ACTION_POWER_CONNECTED and android.intent.action.ACTION_POWER_DISCONNECTED; with these, you can monitor when the power source is connected and disconnected.
You can find information about this process explained incredibly clearly here. Another blog describing the process can be found here.
I am currently developing an Android anti-theft application and I am new in Android development. My apps is able to remotely lock the lost phone, so during configuration, user needs to enter a valid phone number, but how I determine whether the phone number entered is valid? Thanks
-Option one : read(get) the phone number from the sim card (if available, not all operators enable this)
-Option two : If sim card changed(sim serial number) lock the phone and send sms to an other phone number (since the thief will throw away the sim card )
-Option three : use what WHatApp android application uses to identify a person (sending an sms to a specified phone number and detect the incoming sms)
Option 3 seems a bit complicated since you will need a sever side with an sms gateway.
Well here's what comes to my mind .Good luck.
If you connect a data base so, compare to the phone number with to enter a phone number in field. I hope help you. :)
I did a project for a client where a same scenario was raised. Here is what we came to conclusion.
Send an SMS to the Number input and ask the number to send an sms code in reply.
eg. CONFIRM
If the number is valid and known to the user he will call them up
and ask them to SMS back.
If the number is valid and in use the message will get deliverd.
The client agreed the above scenario. Unless you have a really big Database of working numbers (updated so often), it will be a bypass solution.
I believe it is impossible to verify whether a phone number exists unless you call it. You could create a procedure where the app would call the entered phone number, and timed its connection. If the connections last longer than X amount of seconds, it is a valid phone number.