Android一滴滴筆記
17.空格编码 string.xml前后加空格的技巧
16.Android 判断应用程序是否已安装
PackageInfo packageInfo;
try {
packageInfo = this.getPackageManager().getPackageInfo(
"com.twitter.android", 0);
} catch (NameNotFoundException e) {
packageInfo = null;
e.printStackTrace();
}
if(packageInfo ==null){
System.out.println("没有安装");
}else{
System.out.println("已经安装");
}
15.关于timer和线程的使用心得
最紧遇上一个需求,就是需要记录时间相差,并在指定时间内发送push。一开始使用的是线程,在线程里使用SystemClock.sleep做时间加1的操作,和累计之后发送push的判断。逻辑正确,但是时间上的速度加1和现实的时间却不同,原因在于线程sleep了1微秒,但是下面的执行的代码依然占用一定时间。后来改为了timer,指定每100微秒,时间上的确准了,但是因为频繁地使用导致电源消耗严重。最后,通过使用SystemClock.elapsedRealtime()在进入后台和回到app计算相距时间,在前台使用timer刷新
14.Android:lunchmode(Activity的四种启动模式介绍)
13.Monkey壓力測試
啟動:
12.Android佈局三個參數
1)fill_parent
设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
2) wrap_content
设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为 wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置 Windows控件的Autosize属性为True。
3)match_parent
Android2.2中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了
11.Android创建sdcard
Android创建sdcard步骤一、cmd进入tools目录输入mksdcard -l mycard 100M F:\mysdcard.img
10.Application的使用
每個APP都會有一個Application
Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。
通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)。
9.在Dialog裡顯示NumberPicker
NumberPicker np=new NumberPicker(mActivity);
np.setMaxValue(2050);
np.setMinValue(1900);
np.setValue(2014);
np.setWrapSelectorWheel(false);//設置不能循環
np.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);//設置不能編輯
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
builder.setTitle(R.string.tab_calories_height);
builder.setView(np);
builder.setPositiveButton(R.string.tab_calories_yes,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
// tv_gender.setText(genders[position]);
}
});
builder.create().show();
8.android開發facebookSDK
http://blog.csdn.net/chococlatetan/article/details/40049153
7.CalendarView的一個bug
CalendarView的setOnDateChangeListener事件,似乎在滑動的時候也會觸發,明明裡面的日期是沒有變化卻會同樣觸發。
6.startActivityForResult與onActivityResult一些問題
6.1提前執行onActivityResult的原因是在AndroidManifest裡面設置了需要接受傳遞的activity的launchMode模式
这与 Activity 的加载模式(launchMode)有关,该属性可以在 AndroidManifest.xml 中设置。
原先将其设为 singleInstance,经测试,所有需要传递或接收的 Activity 不允许设置该属性,或只能设为标准模式,否则系统将在 startActivityForResult() 后直接调用 onActivityResult()。
6.2调用startActivityForResult后,onActivityResult无响应的问题
两个activity传递数据和返回数据时,请求方的onActivityResult始终无响应,通过debug调试模式也没见调用该方法。查看了各种配置和程序代码,均未发现有错误之处。后面找了很多资料,总算看到一个朋友说是调用startActivityForResult的参数问题,即调用时这样:
startActivityForResult(intent, 0);
是第二个参数的问题,该参数必须大于0才能在返回值,并激活onActivityResult方法。
我最开始是用的一个activity默认的常量:RESULT_OK,跟踪了代码后发现,该常量的值为-1,当然没法激活 onActivityResult方法了,随后随便修改为一个大于0的整数,程序即通跑成功。
startActivityForResult(intent, 1); //这样就行了
startActivityForResult(Intent intent, Int requestCode);
setResut(int resultCode, Intent intent);
onActivityResult(int requestCode, int resultCode, Intent intent);
6.3使用startActivityForResult ERR==WARN/ActivityManager(67): Activity is launching as a new task, so cancelling activity result
最近使用startActivityForResult,出错,跟踪后发现activity并没有被启动,而是直接执行 onActivityResult。后查看日志发现“05-19 02:11:19.822: .”
原来是我把要启动的activity的launchmode设置成singleTask了。
5.為什麼使用Message m = new Message()與 Message message= Message.obtain()
从obtain()的源代码中我们可以知道,它是静态方法,而且只有在spool = null 的情况下才会new出一个Message(),返回一个Message对象,如果在不为空的情况下,Message的对象都是从Message对象池里面拿的实例从而重复使用的,这也为了Android中的Message对象能够更好的回收。
4.px2dp & dp2px
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
3.Set android style and theme in app
http://trinea.iteye.com/blog/1450683
2.//添加notification和點擊notification回到運動界面
Intent notificationIntent = new Intent(mContext, mContext.getClass());
notificationIntent.setAction(Intent.ACTION_MAIN);
notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent contentIntent = PendingIntent.getActivity(mContext, 0, notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mActivity)
.setTicker(ticker)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(title)
.setContentText(text)
.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) mActivity
.getSystemService(mActivity.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.cancel(1);
mNotificationManager.notify(1, mBuilder.build());
1.webview自動適配屏寬
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadUrl(Uri.fromFile(file).toString());
Webview詳細設置:
http://www.cnblogs.com/cc-Cheng/archive/2012/10/26/2740875.html