Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * This is a simplified Java Android app that:
- * - Collects CPU, memory, temperature, battery info every 5 minutes
- * - Listens for charger connect/disconnect events
- * - Detects app installs/uninstalls
- * - Uploads data to an HTTP server
- */
- // AndroidManifest.xml
- // Add the following permissions and declarations
- /*
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
- <uses-permission android:name="android.permission.INTERNET" />
- <application>
- <service android:name=".DataCollectorService" android:exported="false" />
- <receiver android:name=".ChargerReceiver" android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
- <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
- </intent-filter>
- </receiver>
- </application>
- */
- // MainActivity.java
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- startService(new Intent(this, DataCollectorService.class));
- }
- }
- // DataCollectorService.java
- public class DataCollectorService extends Service {
- private final Handler handler = new Handler();
- private final Runnable dataCollector = new Runnable() {
- @Override
- public void run() {
- collectAndUploadData();
- handler.postDelayed(this, 5 * 60 * 1000); // Every 5 minutes
- }
- };
- private BroadcastReceiver appChangeReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String packageName = intent.getData().getSchemeSpecificPart();
- JSONObject eventData = new JSONObject();
- try {
- PackageManager pm = getPackageManager();
- ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
- String appName = pm.getApplicationLabel(appInfo).toString();
- String event = Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction()) ? "app_installed" : "app_removed";
- eventData.put("timestamp", System.currentTimeMillis());
- eventData.put("event", event);
- eventData.put("package", packageName);
- eventData.put("app_name", appName);
- new Thread(() -> uploadToServer(eventData.toString())).start();
- } catch (PackageManager.NameNotFoundException | JSONException e) {
- e.printStackTrace();
- }
- }
- };
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- handler.post(dataCollector);
- registerAppChangeReceiver();
- return START_STICKY;
- }
- private void registerAppChangeReceiver() {
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_PACKAGE_ADDED);
- filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
- filter.addDataScheme("package");
- registerReceiver(appChangeReceiver, filter);
- }
- private void collectAndUploadData() {
- JSONObject data = new JSONObject();
- try {
- data.put("timestamp", System.currentTimeMillis());
- data.put("cpu_usage", readCpuUsage());
- data.put("memory_free", getFreeMemory());
- data.put("battery_level", getBatteryLevel());
- data.put("battery_temp", getBatteryTemp());
- // Upload to server
- new Thread(() -> uploadToServer(data.toString())).start();
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- private float readCpuUsage() {
- try {
- RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
- String load = reader.readLine();
- reader.close();
- String[] toks = load.split(" ");
- long idle1 = Long.parseLong(toks[5]);
- long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]);
- Thread.sleep(360);
- reader = new RandomAccessFile("/proc/stat", "r");
- load = reader.readLine();
- reader.close();
- toks = load.split(" ");
- long idle2 = Long.parseLong(toks[5]);
- long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]);
- return (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));
- } catch (Exception ex) {
- return -1;
- }
- }
- private long getFreeMemory() {
- ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
- ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
- activityManager.getMemoryInfo(memInfo);
- return memInfo.availMem;
- }
- private int getBatteryLevel() {
- Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
- int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
- return (int)((level / (float)scale) * 100);
- }
- private float getBatteryTemp() {
- Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- return batteryIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0) / 10.0f;
- }
- private void uploadToServer(String jsonData) {
- try {
- URL url = new URL("https://your-server.com/upload");
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setRequestMethod("POST");
- conn.setDoOutput(true);
- conn.setRequestProperty("Content-Type", "application/json");
- OutputStream os = conn.getOutputStream();
- os.write(jsonData.getBytes());
- os.flush();
- os.close();
- conn.getResponseCode();
- conn.disconnect();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- // ChargerReceiver.java
- public class ChargerReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
- Log.d("ChargerReceiver", "Charger connected");
- } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
- Log.d("ChargerReceiver", "Charger disconnected");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement