Android程序运行时可以以编程方式动态创建一个程序快捷方式在home screen上,但并不是每种类型的程序都适合在桌面上创建快捷方式。
比如记帐类程序就比较适合自动创建一个快捷方式在home screen上,方便每天对消费进行记录,游戏类型的游戏不是那么的适合。
创建步骤为:
1.在AndroidManifest.xml中添加权限声明
<!-- AndroidManifest.xml -->
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<!-- 新增创建快捷方式权限声明 -->
2.调用下面类进行添加
package com.since2006.helper;
import android.content.Context;
import android.content.Intent;
import android.os.Parcelable;
public class ShortcutHelper {
private static final String TAG = "ShortcutHelper";
private static final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";
/**
* 添加一个程序快捷方式到桌面
*
* 调用此方法,程序需要有"com.android.launcher.permission.INSTALL_SHORTCUT"权限
*
* className: 点击快捷方式要执行的类
*/
public static void addShortcutToHomeScreen(Context context, String packageName, String className, int shortcutIcon, int shortcutName) {
Parcelable iconRes = Intent.ShortcutIconResource.fromContext(context, shortcutIcon);
Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shortcutIntent.setClassName(packageName, className);
Intent intent = new Intent(ACTION_ADD_SHORTCUT);
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getText(shortcutName));
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
context.sendBroadcast(intent);
}
}
调用示例:
/**
* context
* packageName
* className: 点击快捷方式调用的类
* shortcutIcon: 快捷方式图标
* shortcutName: 快捷方式名称
*/
ShortcutHelper.addShortcutToHomeScreen(context, getPackageName(), ".ui.Login", R.drawable.logo, R.string.app_name);
Android为了简化设计并且兼容更多的手机屏幕,系统依照尺寸和分辨率对屏幕进行了区分:
三种尺寸:大、中、小。
三种密度:高(hdpi)、中(mdpi)、低(ldpi)。
类型 | 低密度屏幕(ldpi) | 中密度屏幕(mdpi) | 高密度屏幕(hdpi) |
启动器 | 36 x 36 | 48 x 48 | 72 x 72 |
菜单 | 36 x 36 | 48 x 48 | 72 x 72 |
状态栏 | 24 x 24 | 32 x 32 | 48 x 48 |
标签 | 24 x 24 | 32 x 32 | 48 x 48 |
对话 | 24 x 24 | 32 x 32 | 48 x 48 |
列表视图 | 24 x 24 | 32 x 32 | 48 x 48 |
屏幕 | 宽度 (Pixels) | 高度 (Pixels) | 尺寸 (inches) | 大小 | 密度 |
QVGA | 240 | 320 | 2.6 - 3.0 | Small | Low |
WQVGA | 240 | 400 | 3.2 - 3.5 | Normal | Low |
FWQVGA | 240 | 432 | 3.5 - 3.8 | Normal | Low |
HVGA | 320 | 480 | 3.0 - 3.5 | Normal | Medium |
WVGA | 480 | 800 | 3.3 - 4.0 | Normal | High |
FWVGA | 480 | 854 | 3.5 - 4.0 | Normal | High |
WVGA | 480 | 800 | 4.8 - 5.5 | Large | Medium |
FWVGA | 480 | 854 | 5.0 - 5.8 | Large | Medium |
Android系统中自带了很多图标,我们的程序可以方便使用,以前一直在这个页面查看系统图标列表,但最近经常出现访问不了的情况,索性自己将目前几大版本(1.5, 1.6, 2.1)的图标导出留做以后参考。
Android™ 1.5 android.R.drawable Icon Resources
http://since2006.com/android/1.5-drawables.php
Android™ 1.6 android.R.drawable Icon Resources
http://since2006.com/android/1.6-drawables.php
Android™ 2.1 android.R.drawable Icon Resources
http://since2006.com/android/2.1-drawables.php
2010 Google I/O大会于美国旧金山当地时间5月19日上午10点30分正式开幕,会中Google发布了包括WebM、Wave、Chrome Web Store等新产品,在会场中Google也设置了一个展示柜,从G1到最新的EVO 4G,几乎所有厂商推出的Android手机齐聚一堂。
Android Central网站编辑从现场拍了视频,俺将那些手机列表手工整理了出来。Android个人开发者们,准备好兼容这么多手机了吗? :-)
2分45秒有一款机型没看清楚。
HTC T-Mobile G1
HTC EVO 4G
HTC Desire
HTC Legend
HTC Magic
HTC Hero
HTC Tattoo
HTC Nexus One
HTC DROID Eris
HTC DROID IncredibleMOTO XT800
MOTO DEVOUR
MOTO CLIQ / DEXT
MOTO CLIQ XT / DEXT XT
MOTO MOTOROI
MOTO DROID
MOTO BACKFLIPSamsung Acclaim/SCH-R880
Samsung Galaxy Beam/GT-I8520
Samsung Galaxy S/GT-I900
Samsung Galaxy 3/GT-I5801
Samsung Galaxy 5/GT-I5500
Samsung Galaxy A/SHW-M100SF902
F901
F903
F911
F913Huawei U8100
Huawei U8110
Huawei U8120SHARP KDDIIS01
SHARP NTT docomo SH-10BZTE-SMOOTH
ZTE-LINK
ZTE-BLADELG GT540
LG GW620
LG VS740ACER Liquid stream
ACER Liquid e
ACER beTouch E400Sony Ericsson Xperia X10
Sony Ericsson Xperia X10 mini
Sony Ericsson Xperia X10 mini proDell Aero
Dell StreakSA401
SC402Philips GoGear Connect
Pantech IM-600S Sirius
Kyocera Zio M6000
TCT Mobile Aicatel Mobilephones OT-980
系统相册显示SD卡照片时,为了提高效率不是遍历文件系统中每个目录中的图片后显示出来。而且直接查询系统数据库中的图片信息记录显示。
所以自己新建图片后,打开系统相册时,会找不到所新建的图片。这时可以通过几种方法将新建的图片插入到系统数据库中。
使用Broadcast
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri uri = Uri.fromFile(new File("/sdcard/image.jpg"));
intent.setData(uri);
mContext.sendBroadcast(intent);
使用MediaScannerConnection
final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {
public void onMediaScannerConnected() {
msc.scanFile("/sdcard/image.jpg", "image/jpeg");
}
public void onScanCompleted(String path, Uri uri) {
Log.v(TAG, "scan completed");
msc.disconnect();
}
});
msc.connect();
这两种方法任何一种即可,第二种方法可以通过回调的参数uri取得插入到数据库后的主键id进行后续操作。