android: put all things into the right place
This commit is contained in:
parent
a947ad7960
commit
90a066b545
8 changed files with 38 additions and 129 deletions
38
android/java/org/anbox/BootReceiver.java
Normal file
38
android/java/org/anbox/BootReceiver.java
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
package org.anbox;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.StrictMode;
|
||||
import java.lang.Process;
|
||||
import java.lang.ProcessBuilder;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import android.net.Uri;
|
||||
|
||||
import java.io.RandomAccessFile;
|
||||
import java.io.FileWriter;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.File;
|
||||
|
||||
public class BootReceiver extends BroadcastReceiver {
|
||||
public BootReceiver() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
MainApplication app = ((MainApplication) context.getApplicationContext());
|
||||
app.startServices();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
package org.anbox;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
import android.os.SystemProperties;
|
||||
import android.os.StrictMode;
|
||||
import java.lang.Process;
|
||||
import java.lang.ProcessBuilder;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import android.net.Uri;
|
||||
|
||||
import java.io.RandomAccessFile;
|
||||
import java.io.FileWriter;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.File;
|
||||
|
||||
public class BootReceiver extends BroadcastReceiver {
|
||||
public BootReceiver() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
//start shashlikd app wide services
|
||||
MainApplication app = ((MainApplication) context.getApplicationContext());
|
||||
app.startServices();
|
||||
|
||||
//Make a HTTP request
|
||||
//this does two things; fetches the name of the APK to run (bit overkill, when it could be a simple built prop)
|
||||
//informs the desktop side we're loaded, incase it needs to send anything with a fully operation system
|
||||
|
||||
//Android generally blocks network in the main thread, but we're only going to be showing a black screen idling anyway.
|
||||
//may as well disable that setting
|
||||
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
|
||||
.permitAll().build();
|
||||
StrictMode.setThreadPolicy(policy);
|
||||
|
||||
//Get and install the APK if needed
|
||||
//if the APK doesn't exist the server will return a 403
|
||||
//10.0.2.2 is a special qemu setup for localhost
|
||||
try {
|
||||
Log.d("Shashlikd", "Fetching APK");
|
||||
URL url = new URL("http://10.0.2.2:60057/apk_file");
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
conn.connect();
|
||||
int responseCode = conn.getResponseCode();
|
||||
if (responseCode == HttpURLConnection.HTTP_OK) {
|
||||
// opens input stream from the HTTP connection
|
||||
InputStream inputStream = conn.getInputStream();
|
||||
|
||||
Log.d("Shashlikd", "Saving APK");
|
||||
// opens an output stream to save into file
|
||||
|
||||
File outputDir = context.getCacheDir();
|
||||
File outputFile = File.createTempFile("apkSave", ".apk", outputDir);
|
||||
outputFile.setReadable(true, false);
|
||||
FileOutputStream outputStream = new FileOutputStream(outputFile);
|
||||
|
||||
int bytesRead = -1;
|
||||
byte[] buffer = new byte[4096];
|
||||
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
|
||||
outputStream.close();
|
||||
inputStream.close();
|
||||
|
||||
Log.d("Shashlikd", "File downloaded");
|
||||
Log.d("Shashlikd", outputFile.getPath());
|
||||
|
||||
Log.d("Shashlikd", "Installing APK");
|
||||
|
||||
Process result = new ProcessBuilder()
|
||||
.command("pm", "install", "-r", "-d", outputFile.getPath())
|
||||
.start();
|
||||
result.waitFor();
|
||||
Log.d("Shashlikd", "Apk install finished with " + result.exitValue());
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
//Find the name of the APK to run and start the main activity
|
||||
try {
|
||||
Log.d("Shashlikd", "Getting APK ID");
|
||||
URL url = new URL("http://10.0.2.2:60057/startup");
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
|
||||
conn.connect();
|
||||
InputStream inputStream = conn.getInputStream();
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
|
||||
String apk = reader.readLine();
|
||||
|
||||
if (!apk.isEmpty()) {
|
||||
//now try to start that APK
|
||||
Log.d("Shashlikd", "STARTING");
|
||||
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(apk);
|
||||
if (launchIntent != null) {
|
||||
context.startActivity(launchIntent);
|
||||
} else {
|
||||
Log.e("Shashlikd", "APK not installed");
|
||||
}
|
||||
} else {
|
||||
Log.w("Shashlikd", "No APK name returned");
|
||||
}
|
||||
} catch (MalformedURLException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue