Advertisement
balderman

Android System Events

Mar 30th, 2025 (edited)
563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.60 KB | None | 0 0
  1. /*
  2.  * This is a simplified Java Android app that:
  3.  * - Collects CPU, memory, temperature, battery info every 5 minutes
  4.  * - Listens for charger connect/disconnect events
  5.  * - Detects app installs/uninstalls
  6.  * - Uploads data to an HTTP server
  7.  */
  8.  
  9. // AndroidManifest.xml
  10. // Add the following permissions and declarations
  11. /*
  12. <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
  13. <uses-permission android:name="android.permission.INTERNET" />
  14.  
  15. <application>
  16.     <service android:name=".DataCollectorService" android:exported="false" />
  17.     <receiver android:name=".ChargerReceiver" android:exported="true">
  18.         <intent-filter>
  19.             <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
  20.             <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
  21.         </intent-filter>
  22.     </receiver>
  23. </application>
  24. */
  25.  
  26. // MainActivity.java
  27. public class MainActivity extends AppCompatActivity {
  28.     @Override
  29.     protected void onCreate(Bundle savedInstanceState) {
  30.         super.onCreate(savedInstanceState);
  31.         startService(new Intent(this, DataCollectorService.class));
  32.     }
  33. }
  34.  
  35. // DataCollectorService.java
  36. public class DataCollectorService extends Service {
  37.     private final Handler handler = new Handler();
  38.     private final Runnable dataCollector = new Runnable() {
  39.         @Override
  40.         public void run() {
  41.             collectAndUploadData();
  42.             handler.postDelayed(this, 5 * 60 * 1000); // Every 5 minutes
  43.         }
  44.     };
  45.  
  46.     private BroadcastReceiver appChangeReceiver = new BroadcastReceiver() {
  47.         @Override
  48.         public void onReceive(Context context, Intent intent) {
  49.             String packageName = intent.getData().getSchemeSpecificPart();
  50.             JSONObject eventData = new JSONObject();
  51.             try {
  52.                 PackageManager pm = getPackageManager();
  53.                 ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
  54.                 String appName = pm.getApplicationLabel(appInfo).toString();
  55.                 String event = Intent.ACTION_PACKAGE_ADDED.equals(intent.getAction()) ? "app_installed" : "app_removed";
  56.  
  57.                 eventData.put("timestamp", System.currentTimeMillis());
  58.                 eventData.put("event", event);
  59.                 eventData.put("package", packageName);
  60.                 eventData.put("app_name", appName);
  61.                 new Thread(() -> uploadToServer(eventData.toString())).start();
  62.             } catch (PackageManager.NameNotFoundException | JSONException e) {
  63.                 e.printStackTrace();
  64.             }
  65.         }
  66.     };
  67.  
  68.     @Override
  69.     public int onStartCommand(Intent intent, int flags, int startId) {
  70.         handler.post(dataCollector);
  71.         registerAppChangeReceiver();
  72.         return START_STICKY;
  73.     }
  74.  
  75.     private void registerAppChangeReceiver() {
  76.         IntentFilter filter = new IntentFilter();
  77.         filter.addAction(Intent.ACTION_PACKAGE_ADDED);
  78.         filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
  79.         filter.addDataScheme("package");
  80.         registerReceiver(appChangeReceiver, filter);
  81.     }
  82.  
  83.     private void collectAndUploadData() {
  84.         JSONObject data = new JSONObject();
  85.         try {
  86.             data.put("timestamp", System.currentTimeMillis());
  87.             data.put("cpu_usage", readCpuUsage());
  88.             data.put("memory_free", getFreeMemory());
  89.             data.put("battery_level", getBatteryLevel());
  90.             data.put("battery_temp", getBatteryTemp());
  91.  
  92.             // Upload to server
  93.             new Thread(() -> uploadToServer(data.toString())).start();
  94.         } catch (JSONException e) {
  95.             e.printStackTrace();
  96.         }
  97.     }
  98.  
  99.     private float readCpuUsage() {
  100.         try {
  101.             RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
  102.             String load = reader.readLine();
  103.             reader.close();
  104.             String[] toks = load.split(" ");
  105.             long idle1 = Long.parseLong(toks[5]);
  106.             long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]);
  107.             Thread.sleep(360);
  108.             reader = new RandomAccessFile("/proc/stat", "r");
  109.             load = reader.readLine();
  110.             reader.close();
  111.             toks = load.split(" ");
  112.             long idle2 = Long.parseLong(toks[5]);
  113.             long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4]);
  114.             return (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));
  115.         } catch (Exception ex) {
  116.             return -1;
  117.         }
  118.     }
  119.  
  120.     private long getFreeMemory() {
  121.         ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  122.         ActivityManager.MemoryInfo memInfo = new ActivityManager.MemoryInfo();
  123.         activityManager.getMemoryInfo(memInfo);
  124.         return memInfo.availMem;
  125.     }
  126.  
  127.     private int getBatteryLevel() {
  128.         Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
  129.         int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
  130.         int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
  131.         return (int)((level / (float)scale) * 100);
  132.     }
  133.  
  134.     private float getBatteryTemp() {
  135.         Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
  136.         return batteryIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0) / 10.0f;
  137.     }
  138.  
  139.     private void uploadToServer(String jsonData) {
  140.         try {
  141.             URL url = new URL("https://your-server.com/upload");
  142.             HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  143.             conn.setRequestMethod("POST");
  144.             conn.setDoOutput(true);
  145.             conn.setRequestProperty("Content-Type", "application/json");
  146.             OutputStream os = conn.getOutputStream();
  147.             os.write(jsonData.getBytes());
  148.             os.flush();
  149.             os.close();
  150.             conn.getResponseCode();
  151.             conn.disconnect();
  152.         } catch (Exception e) {
  153.             e.printStackTrace();
  154.         }
  155.     }
  156. }
  157.  
  158. // ChargerReceiver.java
  159. public class ChargerReceiver extends BroadcastReceiver {
  160.     @Override
  161.     public void onReceive(Context context, Intent intent) {
  162.         String action = intent.getAction();
  163.         if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
  164.             Log.d("ChargerReceiver", "Charger connected");
  165.         } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
  166.             Log.d("ChargerReceiver", "Charger disconnected");
  167.         }
  168.     }
  169. }
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement