public static ArrayList<Sensor> listSensors() {
		String urlString = Params.General.devMode ? SenseUrls.DEV_BASE
				: SenseUrls.BASE;

		// parse parameters
		urlString += "sensors" + SenseUrls.FORMAT;
		urlString += "?page=" + Params.Sensors.page;
		urlString += "&per_page=" + Params.Sensors.per_page;
		urlString += "&shared=" + (Params.Sensors.shared ? "1" : "0");
		urlString += "&owned=" + (Params.Sensors.owned ? "1" : "0");
		urlString += "&physical=" + (Params.Sensors.physical ? "1" : "0");
		urlString += "&details=" + (Params.Sensors.details ? "full" : "no");

		// print request
		if (Params.General.verbosity) {
			printRequest(urlString);
		}

		Map<String, String> response = new HashMap<String, String>();

		try {
			response = Connector.request(urlString, null,
					Settings.getSession_id());
		} catch (IOException e) {
			e.printStackTrace();
		}

		// print response
		if (Params.General.verbosity) {
			printResponse(response);
		}

		// create ArrayList of sensors
		ArrayList<Sensor> sensors = new ArrayList<Sensor>(); // ArrayList of
																// sensors
		String content = response.get("content"); // String format of sensors
		JsonObject json = (JsonObject) parser.parse(content); // JSON container
																// of sensors

		int numSensors = json.get("sensors").getAsJsonArray().size();

		for (int i = 0; i < numSensors; i++) {
			JsonElement element = json.get("sensors").getAsJsonArray().get(i);
			Sensor s = new Gson().fromJson(element, Sensor.class);
			sensors.add(s);
		}

		return sensors;
	}