如何让Drawable绕着中心旋转?
Animation a = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
a.setRepeatCount(-1);
a.setDuration(1000);
如何控制Android LED灯颜色?
很多Android手机上都配有LED灯,比如HTC的手机在充电、新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面Android123给大家说下如何通过代码控制LED灯的闪烁,因为有些机型没有LED灯或颜色种类较少,发布时需要真机观察。
final int ID_LED=19871103;
NotificationManager nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.ledARGB = 0xFFFFFF; //这里是颜色,我们可以尝试改变,理论上0xFF0000是红色,0x00FF00是绿色
notification.ledOnMS = 100;
notification.ledOffMS = 100;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
nm.notify(ID_LED, notification);
nm.cancel(ID_LED);
如何获取APK文件安装时间?
很多Android开发者想设计一个APK管理程序,获取APK文件的安装日期很多网友不是很明白。在早期Android123使用的方法是通过PackageManager类的getInstalledApplications方法返回一个ApplicationInfo数组,ApplicationInfo类中sourceDir可以获取APK的文件路径,从而使用File类读取文件的上次修改时间而实现。但这可能导致:
1. 无法获取原始的创建时间,可能很早就被创建了,之后被替换了。
2. 如果这个APK在一个私有的位置,比如app-private目录,使用Market付费购买的应用在这个位置,如果没有Root的Android手机是没有权限读取的,也导致获取时间失败。
在Android 2.3 API Level为9中,ApplicationInfo类新增的firstInstallTime和lastUpdateTime这两个字段,可以直接获取到APK的创建或上次修改的时间,即使是付费软件也能正常的获取。
如何区别单位px和dp以及sp?
px (pixels)像素 -- 一般我们HVGA代表320x480像素,这个用的比较多。
dip或dp (device independent pixels)设备独立像素 -- 这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA cwj推荐使用这个,不依赖像素。
sp (scaled pixels — best for text size)放大像素-- 主要处理字体的大小。
下面的几个是不常用的,大家也知道这里android123就不再过多的赘述。
in (inches)英寸
mm (millimeters)毫米
pt (points)点
如何动态改变ImageView大小?
很多网友可能发现在layout.xml文件中定义了ImageView的绝对大小后,无法动态修改以后的大小显示,其实Android平台在设计UI控件时考虑到这个问题,为了适应不同的Drawable可以通过在xml的相关ImageView中加入android:scaleType="fitXY" 这行即可,但因为使用了缩放可能会造成当前UI有所变形。使用的前提是限制ImageView所在的层,可以使用一个内嵌的方法限制显示。
如何在Android中最简单的播放GIF动画?
GIF动画的原理就是逐帧播放,在Android中提供了AnimationDrawable类可以实现,有的网友写过GIF89A的解码方法在过去的J2ME平台移植到Android平台也能用,其实在Google Android上面开发目前2.2以后的固件支持的方法除了Flash Player外,更好的兼容方法就是使用万能的webkit浏览器了,我们直接在工程中内嵌一个webView,html中只要写上类似img src="http://android123.com.cn/cwj.gif" 这样的就可以了,当然了路径大家可以换成本地的,对于浏览器使用本地资源url为file://开头。 不过webView的资源消耗也不小,开个webView对象可能占用了至少8MB的RAM吧,保守估计,当然更多的要看插件和以及html的复杂程度所决定的。
如何调用手机系统拨号页面?
/*调出联系人界面*/
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(ContactsContract.Contacts.CONTENT_URI);//android2.X
startActivity(intent);
/* 调用拨号的画面 */
Intent myIntentDial = new Intent("android.intent.action.CALL_BUTTON");
startActivity(myIntentDial);
加权限:
<uses-permission android:name="android.permission.CALL_PHONE" />
如何取得GPS卫星个数?
LocationManager manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Iterator<GpsSatellite> iterator = manager.getGpsStatus(null).getSatellites().iterator();
int count = 0;
while (iterator.hasNext()) {
count++;
}
return count;
如何判断手机有无网络?
ConnectivityManager cwjManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (cwjManager.getActiveNetworkInfo() != null) {
if (cwjManager.getActiveNetworkInfo().isAvailable()) {
String type = cwjManager.getActiveNetworkInfo().getTypeName();
System.out.println("_____________________-" + type);
}
;
}else {
System.out.println("_____________________-" + cwjManager.getActiveNetworkInfo());
}
如果拟开发一个网络应用的程序,首先考虑是否接入网络,在Android手机中判断是否联网可以通过 ConnectivityManager 类的isAvailable()方法判断,首先获取网络通讯类的实例,使用cwjManager.getActiveNetworkInfo().isAvailable(); 来返回是否有效,如果为True则表示当前Android手机已经联网,可能是WiFi或GPRS、HSDPA等等,具体的可以通过ConnectivityManager 类的getActiveNetworkInfo() 方法判断详细的接入方式,需要注意的是有关调用需要加入<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 这个权限,在真机上Market和Browser程序都使用了这个方法,来判断是否继续,同时在一些网络超时的时候也可以检查下网络连接是否存在,以免浪费手机上的电力资源。
如何获得自己程序的版本?
private String mVersion;
public String longVersion() {
if (mVersion == null) {
PackageManager pm = getPackageManager();
PackageInfo pi;
try {
pi = pm.getPackageInfo(getPackageName(), 0);
mVersion = pi.versionName;
System.out.println("mVersion-----------------> "+mVersion);
} catch (NameNotFoundException e) {
mVersion = ""; // failed, ignored
}
}
return mVersion;
}
drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
如何理解Context?
Context字面意思上下文。
位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。
常规需要Context实例的方法主要有各种Service实现的类,比如说SensorManager在实例化时需要getSystemService(String)方法就必须由Context的实例执行,还有一些私有的文件系统I/O比如说openFileInput以及常用的Toast的makeText方法等。
如何为Android MapView申请apiKey?
1.首先先要获取你的debug keystore位置:
打开Eclipse--->Windows--->Preferences--->Android--->Build
查看默认的debug keystore位置,我的是C:\Documents and Settings\Android123\.android\debug.keystore
2.在cmd中执行:
keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\Android123\.android\debug.keystore" -storepass android -keypass android
双引号中的为你keystore位置
执行结果:
androiddebugkey, May 4, 2009, PrivateKeyEntry,
Certificate fingerprint (MD5): XX:XX:XX:XX:XX:XX:XX:XX.............
这里的XX:XX:XX:XX:XX:XX:XX:XX.............就是你的认证指纹
3.打开http://code.google.com/intl/zh-CN/android/maps-api-signup.html
填入你的认证指纹(MD5)即可获得apiKey了,结果显示如下:
您的密钥是:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4.使用得到的apiKey:在layout中加入MapView
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="XXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
如何理解onInterceptTouchEvent()事件处理点击的承继关系?
onInterceptTouchEvent()的机制:
1. down事件首先会传递到onInterceptTouchEvent()方法
2. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,
那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最
终的目标view的onTouchEvent()处理
3. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,
那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样
传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。
4. 如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一
层次的view的onTouchEvent()处理
5. 如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递
给该view的onTouchEvent()处理
如何彻底关闭android应用程序(back按键)?
在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果。
我们可以这样做,当用户点击自定义的退出按钮或返回键时(需要捕获动作),我们在onDestroy()里强制退出应用,或直接杀死进程,具体操作代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//按下键盘上返回按钮
if(keyCode == KeyEvent.KEYCODE_BACK){
finish();
return true;
}else{
return super.onKeyDown(keyCode, event);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
System.exit(0);
//或者下面这种方式
//android.os.Process.killProcess(android.os.Process.myPid());
}
如何让所有Activty界面全去掉标题栏?
修改AndroidManifest.xml ,在application 标签中添加 。
android:theme="@android:style/Theme.NoTitleBar"
当同时有多个ImageView共同使用同一个资源文件例如:demo.png的时候,如果我们在利用代码控制其中一个ImageView的状态例如:alpha的时候,同时也会影响到别的ImageView的状态,这个时候我们可以通过下面的办法来避免这种情况的发生:
//res_ico 是一个图片资源文件id R.drawable.***
Drawable ico = getResources().getDrawable(res_ico);
ImageView iv = new ImageView(this);
iv.setBackgroundDrawable(ico);
iv.setClickable(false);
iv.setAdjustViewBounds(true);
ico.mutate().setAlpha(20);
如何判断GPS是否打开以及跳转到设置GPS界面?
检查GPS是否打开
locationManager.isProviderEnabled("gps");
转到GPS设置界面
startActivity(new Intent("android.settings.LOCATION_SOURCE_SETTINGS"));
如何获取手机版本等信息?
// 获取手机SDK 版本和版本号
System.out.println("version-> "+android.os.Build.VERSION.SDK);
System.out.println("version-> "+android.os.Build.VERSION.RELEASE);
//获取产品型号
System.out.println("version-> "+android.os.Build.MODEL);
如何在Android开发之模拟按下Home键的效果 ?
Intent i= new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果是服务里调用,必须加入new task标识
i.addCategory(Intent.CATEGORY_HOME);
如何杀死进程?
在Android 2.2中新增了一个API可以帮助我们杀死后台进程,不过其调用的API Level最小为8,killBackgroundProcesses是android.app.ActivityManager类的方法,使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。
该方法的原型 public void killBackgroundProcesses (String packageName) 仅有一个参数为package Name,使用方法比较简单:
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses("cn.com.android123.cwj");
// API Level至少为8才能使用
如何在子线程中通过handler操作界面元素?
android.os.Handler hander = new android.os.Handler(); hander.postDelayed(new Runnable()
{
public void run()
{
ad.dismiss();
}
}, 5 * 1000);
如何清除桌面墙纸?
clearWallpaper();
不过我们需要设置墙纸更改权限:
<uses-permission android:name="android.permission.SET_WALLPAPER" />
如何申请访问SDCard的权限?
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>