Sending a response from PHP to an Android / Java mobile app?

Currently, I have a piece of code in an Android application that picks up IMEI devices and sends this IMEI as a parameter to a PHP script hosted on the Internet.

The PHP script then takes an IMEI parameter and checks the file to see if IMEI exists in the file if I want my Android application to know that IMEI exists. So essentially, I just want to return True to my application.

Is this possible with PHP?

Here is my code:

Android / Java

//Test HTTP Get for PHP public void executeHttpGet() throws Exception { BufferedReader in = null; try { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI("http://testsite.com/" + "imei_script.php?imei=" + telManager.getDeviceId() )); HttpResponse response = client.execute(request); in = new BufferedReader (new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String page = sb.toString(); System.out.println(page); } finally { if (in != null) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } } 

The above sends IMEI as a parameter to the PHP script, which successfully selects it and successfully runs the file check, however I want it to be able to send a positive response with the PHP script if the IMEI matches one in the file.

Here is the PHP:

 <?php // to return plain text header("Content-Type: plain/text"); $imei = $_GET["imei"]; $file=fopen("imei.txt","r") or exit("Unable to open file!"); while(!feof($file)) { if ($imei==chop(fgets($file))) echo "True"; } fclose($file); ?> 

So, instead of echo True, I want my application to be able to find out that IMEI was found, is this possible, and if so, what should I use to achieve it?

+7
source share
3 answers

This is good stuff! in fact, you are almost there. your php shouldn't change, your java should! you just need to check the result of the response inside your java code. redefine your java method as

 public String executeHttpGet() { 

then this method returns a page with variables.

now you can create a helper method somewhere. if you put it in the same class as executeHttpGet it will look like this:

 public boolean imeiIsKnown(){ return executeHttpGet().equals("True"); } 

now you can call this method to find out if your imei is known in your php server.

+3
source

I'm not sure if this is good for you or not, but you can use headers. If the IMEI was found, you can send the header ("Status: HTTP / 1.1 200 OK"), otherwise send the header ("Status: 404 Not Found").

And then you should check the status of the response in your application.

+2
source

your code basically sounds, all you have to do is tweak it a bit. I mixed and matched the answers above because I needed to accomplish exactly what you were trying to do. I created a database instead of checking txt files.

 CREATE TABLE IF NOT EXISTS `user_device` ( `Id_User_Device` int(11) NOT NULL auto_increment, `Nr_User_Device` varchar(60) collate utf8_bin NOT NULL, `Ic_User_Device_Satus` int(11) NOT NULL default '1', PRIMARY KEY (`Id_User_Device`), KEY `Nr_User_Device` (`Nr_User_Device`,`Ic_User_Device_Satus`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=20 ; 

android java code would be (don't forget to create the correct settings in the main.xml layout file by inserting 2 elements into the helloworld classic screen:

 import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URI; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class ZdeltestEMEIActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DeviceUuidFactory deviceUuidFactory = new DeviceUuidFactory(this); String deviceUuid = deviceUuidFactory.getDeviceUuid().toString(); Log.d("tgpost",deviceUuid); try { String webPostAnswer = deviceIdCheck(deviceUuid); if (webPostAnswer != null) { TextView tv1 = (TextView) findViewById(R.id.textdisplay01); TextView tv2 = (TextView) findViewById(R.id.textdisplay02); tv1.setText(webPostAnswer); tv2.setText(deviceUuid); Log.d("tgpost", "okok "+webPostAnswer); } else { Log.d("tgpost", "nono empty"); } } catch (Exception e) { // TODO Auto-generated catch block Log.i("tgpost", "exc " + e.getMessage()); Log.i("tgpost", e.toString()); Log.e("tgpost", e.getStackTrace().toString()); e.printStackTrace(); } } public String deviceIdCheck(String deviceUuidIn) throws Exception { boolean flagOK = false; BufferedReader in = null; try { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); Log.v("tgpost", "okok"); //"imei_script.php?deviceId="; + telManager.getDeviceId() request.setURI(new URI("http://www.you.net/" + "deviceIdCheck.php?deviceId=" + deviceUuidIn )); HttpResponse response = client.execute(request); Log.d("tgpost", "php answered> "+response); in = new BufferedReader (new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line = ""; String NL = System.getProperty("line.separator"); while ((line = in.readLine()) != null) { sb.append(line + NL); } in.close(); String page = sb.toString(); Log.d("tgpost", "php answered HUMAN> "+page); return page; } catch (Exception e) { return "problems with connection "+e.getMessage(); } } } 

with extra class

 import android.content.Context; import android.content.SharedPreferences; import android.provider.Settings.Secure; import android.telephony.TelephonyManager; import java.io.UnsupportedEncodingException; import java.util.UUID; public class DeviceUuidFactory { protected static final String PREFS_FILE = "device_id.xml"; protected static final String PREFS_DEVICE_ID = "device_id"; protected static UUID uuid; public DeviceUuidFactory(Context context) { if( uuid ==null ) { synchronized (DeviceUuidFactory.class) { if( uuid == null) { final SharedPreferences prefs = context.getSharedPreferences( PREFS_FILE, 0); final String id = prefs.getString(PREFS_DEVICE_ID, null ); if (id != null) { // Use the ids previously computed and stored in the prefs file uuid = UUID.fromString(id); } else { final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); // Use the Android ID unless it broken, in which case fallback on deviceId, // unless it not available, then fallback on a random number which we store // to a prefs file try { if (!"9774d56d682e549c".equals(androidId)) { uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")); } else { final String deviceId = ((TelephonyManager) context.getSystemService( Context.TELEPHONY_SERVICE )).getDeviceId(); uuid = deviceId!=null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")) : UUID.randomUUID(); } } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } // Write the value out to the prefs file prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString() ).commit(); } } } } } /** * Returns a unique UUID for the current android device. As with all UUIDs, this unique ID is "very highly likely" * to be unique across all Android devices. Much more so than ANDROID_ID is. * * The UUID is generated by using ANDROID_ID as the base key if appropriate, falling back on * TelephonyManager.getDeviceID() if ANDROID_ID is known to be incorrect, and finally falling back * on a random UUID that persisted to SharedPreferences if getDeviceID() does not return a * usable value. * * In some rare circumstances, this ID may change. In particular, if the device is factory reset a new device ID * may be generated. In addition, if a user upgrades their phone from certain buggy implementations of Android 2.2 * to a newer, non-buggy version of Android, the device ID may change. Or, if a user uninstalls your app on * a device that has neither a proper Android ID nor a Device ID, this ID may change on reinstallation. * * Note that if the code falls back on using TelephonyManager.getDeviceId(), the resulting ID will NOT * change after a factory reset. Something to be aware of. * * Works around a bug in Android 2.2 for many devices when using ANDROID_ID directly. * * @see http://code.google.com/p/android/issues/detail?id=10603 * * @return a UUID that may be used to uniquely identify your device for most purposes. */ public UUID getDeviceUuid() { return uuid; } } 

on the php side:

 <?php // to return plain text // header("Content-Type: plain/text"); include('/home/public_html/ConnStrDB.php'); $deviceId = $_GET["deviceId"]; $sql = "SELECT Nr_User_Device FROM user_device WHERE Nr_User_Device = '".$deviceId."'"; $result = mysql_query($sql); if ($result) { $row = mysql_fetch_array($result); if ($row[0]) {$deviceIdFile = $row[0];} else {$deviceIdFile = "device not found";} } else { $deviceIdFile = "no check was made, empty set"; } echo $_GET["deviceId"]." ".$deviceIdFile; ?> 

and (so you don't have to insert numbers manually (just change the php file name in submit):

 <?php // to return plain text // header("Content-Type: plain/text"); include('/home/public_html/ConnStrDB.php'); $deviceId = $_GET["deviceId"]; $sql = "SELECT Nr_User_Device, Ic_User_Device_Status FROM user_device WHERE Nr_User_Device = ".$deviceId; $sql = "INSERT INTO user_device (Nr_User_Device) VALUES ('".$deviceId."')"; $result = mysql_query($sql); if ($result) { $deviceIdFile = "device inserted"; } else { $deviceIdFile = "not inserted"; } echo $_GET["deviceId"]." ".$deviceIdFile; ?> 

if imei is displayed 3 times on your mobile screen (the one that was received in php and the one that was received in the database).

ConnStrDB.php is a file that contains your full connection to the MySQL database.

if you answer with long text, the android application will receive it, as well as a detailed version of any php warning. if you don't need json, you can respond to any xml via php echo. Thanks for your question, very helpful! and thanks for the GREAT answers!

0
source

All Articles