I am working in a project and so far I have an android application, with a sqlite db, with a webserver running in my android and a php application also in my device.
So, my problem is.. My PHP application is reachable using any PC web browser because there is an internal webserver (lighttp).
However, my client said we do not want to use this approach and prefer to have a standalone application that is able to connect to my device, read the database and generate the reports.
I am very outdated guy.. what do you guys recommend to implement it ? I could write the software in java and generate the report but I am not sure how to connect to the device database.
The IP used by the device is available for connection (ping works without problems).
What you guys recommend ?
Well, seeing as your client does not want to use a pre-built webserver you could create a server with php to handle the requests of your android app.
PHP offers support for secure TLS Socket connections.
This is the example server code from the website. I recommend installing php7 if you don't already have it installed, and I'm not sure that you can run the server code without it.
#!/usr/local/bin/php -q
<?php
error_reporting(E_ALL);
/* Allow the script to hang around waiting for connections. */
set_time_limit(0);
/* Turn on implicit output flushing so we see what we're getting
* as it comes in. */
ob_implicit_flush();
$address = '192.168.1.53'; // Your IP
$port = 10000; // Your Port
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: reason: " .
socket_strerror(socket_last_error()) . "
";
}
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed: reason: " .
socket_strerror(socket_last_error($sock)) . "
";
}
if (socket_listen($sock, 5) === false) {
echo "socket_listen() failed: reason: " .
socket_strerror(socket_last_error($sock)) . "
";
}
do {
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accept() failed: reason: " .
socket_strerror(socket_last_error($sock)) . "
";
break;
}
/* Send instructions. */
$msg = "
Welcome to the PHP Test Server.
" .
"To quit, type 'quit'. To shut down the server type 'shutdown'.
";
socket_write($msgsock, $msg, strlen($msg));
do {
if (false === ($buf = socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
echo "socket_read() failed: reason:" .
socket_strerror(socket_last_error($msgsock)) . "
";
break 2;
}
if (!$buf = trim($buf)) {
continue;
}
if ($buf == 'quit') {
break;
}
if ($buf == 'shutdown') {
socket_close($msgsock);
break 2;
}
$talkback = "PHP: You said '$buf'.
";
socket_write($msgsock, $talkback, strlen($talkback));
echo "$buf
";
} while (true);
socket_close($msgsock);
} while (true);
socket_close($sock);
?>
Link to PHP Socket Example: http://php.net/manual/en/sockets.examples.php
You can also use the answers in this post to get your android device connected to your running php server.
Don't forget to open your port that you choose in your system firewall! And in your router if you want it to be publicly connectable, but beware of uninvited guests connecting to your network!
Reading and writing to the internal database in your Android device can be achieved with the SQLiteOpenHelper and SQLiteDatabase classes that are built into the Android SDK.
See Android Documentation: https://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
Here's an extremely helpful tutorial for reading and writing to the sqlite database in your device. The tutorial uses the classes that I have mentioned above. This should be enough to get you started in manipulating your clients data without the use of the lighttp server or php code: http://www.vogella.com/tutorials/AndroidSQLite/article.html#tutorial-using-sqlite
Here is another related post that may prove helpful.