2011-02-03 107 views
4

我目前正在研究一个应用程序来显示电池状态,我想使用Android绘图而不是自己的图像来减小应用程序的大小。Android:访问“系统” - 提取

我发现这个网页,其中列出了每个SDK版本可用图像和可用性:
http://www.fixedd.com/projects/android_drawables_display

我的问题:我如何可以访问“系统” -drawables?如果您点击链接并选择“状态”选项卡,则会出现一些类似“stat_sys_battery_0”的电池可绘图,但我无法访问它,Eclipse不会为其提供智能感知,并且如果我使用其中一种可绘制的。因为那些drawable是所有SDK版本的一部分,所以我认为我应该能够使用它们,或者是那些“特殊的”drawable以某种方式受到保护,以便它们只能被系统函数使用(和不是应用程序)?

任何想法是赞赏。

Select0r

回答

1

有实际上似乎是访问系统图标的方式,但它不是真正的工作如文档中表示,但如果有人有兴趣,我会添加:

intent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL, -1)

会得到你符合当前电池状态的图标资源ID:
http://developer.android.com/reference/android/os/BatteryManager.html#EXTRA_ICON_SMALL

额外的ACTION_BATTERY_CHANGED: 整数,其中包含 的资源ID,指示当前电池状态的小状态栏图标。

但是,无论实际的电池电量如何,它总是返回相同的图标。仅仅尝试随机数就可以找到图标,但我不知道这些ID在整个SKD级别以及不同的机器上是否一致,所以我宁愿不依靠这些。

2

我发现与信息的另一个链接,并非所有的绘图资源都是公开的。它并没有说为什么一些drawables将是私人的,但我想我必须忍受这一事实并将所需的图像复制到我的应用程序。
http://androiddrawableexplorer.appspot.com/

注:某些在Android罐子的图像是不公开的,因此不能直接使用(你可以将它们复制到你自己的应用程序,但通过“Android”的包命名空间无法引用它们)。

+0

+1高兴你找到了答案。之前我遇到过这个问题,并且忽视了我保持1.6兼容的构建环境的事实。 – 2011-02-03 21:18:17

3

希望这是你要找的人:

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); 

    } 
}; 
+0

这实际上与两周前我接受的解决方案几乎相同。唯一的区别是你使用的是“icon-small”,而我正在使用`BatteryManager.EXTRA_ICON_SMALL`。 – Select0r 2011-03-05 21:12:31