Android: доступ к «системным» средствам - PullRequest
4 голосов
/ 03 февраля 2011

В настоящее время я работаю над приложением, отображающим состояние батареи, и я хотел бы использовать Android-элементы рисования вместо собственных изображений, чтобы уменьшить размер приложения.

Я нашел эту страницу со спискомДоступные изображения и наличие для каждой SDK-версии:http://www.fixedd.com/projects/android_drawables_display

Мой вопрос: Как я могу получить доступ к "системным" -символам?Если вы щелкнете по ссылке и выберете вкладку «Статус», есть некоторые элементы, которые можно извлечь из батареи, например «stat_sys_battery_0», но я не могу получить к ней доступ, Eclipse не предлагает intellisense для нее и не скомпилирует приложение, еслииспользуйте одну из этих отрисовок.

Поскольку эти отрисовки являются частью всех SDK-версий, я думаю, что я смогу их использовать, или эти «специальные» отрисовки защищены таким образом, чтобы они могли толькоиспользоваться системными функциями (а не приложениями)?

Любая идея приветствуется.

Select0r

Ответы [ 3 ]

4 голосов
/ 01 марта 2011

Надеюсь, это то, что вы искали:

private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context arg0, Intent intent) {

        int level = intent.getIntExtra("level", 0);

        int batteryIconId = intent.getIntExtra("icon-small", 0);
        Button toolBarBattery = (Button) findViewById(R.id.toolBarButton);

        LevelListDrawable batteryLevel = (LevelListDrawable) getResources().getDrawable(batteryIconId);
        batteryLevel.setLevel(level);

        toolBarBattery.setBackgroundDrawable(batteryLevel);

    }
};
2 голосов
/ 04 февраля 2011

Я нашел еще одну ссылку с информацией о том, что не все чертежи являются общедоступными. Здесь не сказано , почему некоторые рисунки будут частными, но я думаю, мне придется согласиться с этим и скопировать необходимые изображения в мое приложение.
http://androiddrawableexplorer.appspot.com/

ПРИМЕЧАНИЕ. Некоторые изображения в банке Android не являются общедоступными и поэтому не могут использоваться напрямую (вы можете скопировать их в собственное приложение, но не можете ссылаться на них через пространство имен пакета "android").

1 голос
/ 12 февраля 2011

Кажется, на самом деле есть способ доступа к системным значкам, но он не совсем работает, как указано в документации, но я добавлю его на случай, если кому-то будет интересно:

intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, -1)

Получит вам идентификатор ресурса значка, который соответствует текущему состоянию батареи:http://developer.android.com/reference/android/os/BatteryManager.html#EXTRA_ICON_SMALL

Дополнительно для ACTION_BATTERY_CHANGED: целое число, содержащее идентификатор ресурса небольшой строки состояния, указывающей текущее состояние батареи.

Однако всегда возвращается один и тот же значок, независимо от того, что фактический уровень заряда батареи.Поиск значка путем простого выбора случайных чисел может работать, но я не знаю, одинаковы ли идентификаторы на всех уровнях SKD, а также на разных машинах, поэтому я бы не стал полагаться на это.

...