当前位置:文档之家› Android中电池信息(Battery information)的取得

Android中电池信息(Battery information)的取得

Android中电池信息(Battery information)的取得
Android中电池信息(Battery information)的取得

Android中电池信息(Battery information)的取得

[日期:2010-08-23] 来源:Linux社区作者:Linux

这里介绍电池信息的取得.

Android.content.BroadcastReceiver类

Android.os.BatteryManager类

● 电池信息的取得,调用registerReceiver()方法。

第1个参数,设置BroadcastReceiver实例

第2个参数,设置追加了Intent.ACTION_BATTERY_CHANGED处理的IntentFilter 实例。

● 在BroadcastReceiver的onReceive()事件,接收到的Intent.ACTION_BATTERY_CHANGED,包括下面的信息。

“status”(int类型)…状态,定义值是BatteryManager.BATTERY_STATUS_XXX。

“health”(int类型)…健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。

“present”(boolean类型)

“level”(int类型)…电池剩余容量

“scale”(int类型)…电池最大值。通常为100。

“icon-small”(int类型)…图标ID。

“plugged”(int类型)…连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。

“voltage”(int类型)…mV。

“temperature”(int类型)…温度,0.1度单位。例如表示197的时候,意思为19.7度。

“technology”(String类型)…电池类型,例如,Li-ion等等。

例程源码(Java)

package com.adakoda.batterytest;

import Android.app.Activity;

import Android.content.BroadcastReceiver;

import Android.content.Context;

import Android.content.Intent;

import Android.content.IntentFilter;

import Android.os.BatteryManager;

import Android.os.Bundle;

import Android.util.Log;

public class BatteryTestActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/5510095200.html,yout.main);

}

@Override

protected void onResume() {

super.onResume();

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_BATTERY_CHANGED);

registerReceiver(mBroadcastReceiver, filter);

}

@Override

protected void onPause() {

super.onPause();

unregisterReceiver(mBroadcastReceiver);

}

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

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

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

boolean present = intent.getBooleanExtra("present", false); int level = intent.getIntExtra("level", 0);

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

int icon_small = intent.getIntExtra("icon-small", 0);

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

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

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

String technology = intent.getStringExtra("technology");

String statusString = "";

switch (status) {

case BatteryManager.BATTERY_STATUS_UNKNOWN:

statusString = "unknown";

break;

case BatteryManager.BATTERY_STATUS_CHARGING:

statusString = "charging";

break;

case BatteryManager.BATTERY_STATUS_DISCHARGING:

statusString = "discharging";

break;

case BatteryManager.BATTERY_STATUS_NOT_CHARGING:

statusString = "not charging";

break;

case BatteryManager.BATTERY_STATUS_FULL:

statusString = "full";

break;

}

String healthString = "";

switch (health) {

case BatteryManager.BATTERY_HEALTH_UNKNOWN:

healthString = "unknown";

break;

case BatteryManager.BATTERY_HEALTH_GOOD:

healthString = "good";

break;

case BatteryManager.BATTERY_HEALTH_OVERHEAT:

healthString = "overheat";

break;

case BatteryManager.BATTERY_HEALTH_DEAD:

healthString = "dead";

break;

case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:

healthString = "voltage";

break;

case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:

healthString = "unspecified failure";

break;

}

String acString = "";

switch (plugged) {

case BatteryManager.BATTERY_PLUGGED_AC:

acString = "plugged ac";

break;

case BatteryManager.BATTERY_PLUGGED_USB:

acString = "plugged usb";

break;

}

Log.v("status", statusString);

Log.v("health", healthString);

Log.v("present", String.valueOf(present));

Log.v("level", String.valueOf(level));

Log.v("scale", String.valueOf(scale));

Log.v("icon_small", String.valueOf(icon_small));

Log.v("plugged", acString);

Log.v("voltage", String.valueOf(voltage));

Log.v("temperature", String.valueOf(temperature));

Log.v("technology", technology);

}

}

};

Android中电池信息(Battery information)的取得收藏

原文地址:https://www.doczj.com/doc/5510095200.html,/sharp2wing/archive/2010/08/20/5826493.aspx 这里介绍电池信息的取得.

android.content.BroadcastReceiver类

android.os.BatteryManager类

● 电池信息的取得,调用registerReceiver()方法。

第1个参数,设置BroadcastReceiver实例

第2个参数,设置追加了Intent.ACTION_BATTERY_CHANGED处理的IntentFilter 实例。

● 在BroadcastReceiver的onReceive()事件,接收到的Intent.ACTION_BATTERY_CHANGED,包括下面的信息。

“status”(int类型)…状态,定义值是BatteryManager.BATTERY_STATUS_XXX。

“health”(int类型)…健康,定义值是BatteryManager.BATTERY_HEALTH_XXX。

“present”(boolean类型)

“level”(int类型)…电池剩余容量

“scale”(int类型)…电池最大值。通常为100。

“icon-small”(int类型)…图标ID。

“plugged”(int类型)…连接的电源插座,定义值是BatteryManager.BATTERY_PLUGGED_XXX。

“voltage”(int类型)…mV。

“temperature”(int类型)…温度,0.1度单位。例如表示197的时候,意思为19.7度。

“technology”(String类型)…电池类型,例如,Li-ion等等。

}

原创 Android中的 BatteryService 及相关组件收藏

转载时请注明出处和作者联系方式

文章出处:https://www.doczj.com/doc/5510095200.html,/blog

作者联系方式:李先静

BatteryService作为电池及充电相关的服务,它的实现非常简单:

o 监听UEvent,读取sysfs里中的状态。

实现了一个UEvent的观察者。uevent是Linux内核用来向用户空间主动上报事件的机制,对于JAVA程序来说,只实现UEventObserver的虚函数onUEvent,然后注册即可。

private UEventObserver mUEventObserver = new UEventObserver() {

@Override

public void onUEvent(UEventObserver.UEvent event) {

update();

}

};

这里只关注power_supply的事件:

mUEventObserver.startObserving("SUBSYSTEM=power_supply");

当有power_supply相关的事件上报时,就会调用update函数。

update先调用native_update从sysfs中读取相关状态(com_android_server_BatteryService.cpp):

Linux驱动提供了下列文件,供应用程序获取电源相关状态:

#define AC_ONLINE_PATH "/sys/class/power_supply/ac/online"

#define USB_ONLINE_PATH "/sys/class/power_supply/usb/online"

#define BATTERY_STATUS_PATH "/sys/class/power_supply/battery/status"

#define BATTERY_HEALTH_PATH "/sys/class/power_supply/battery/health"

#define BATTERY_PRESENT_PATH "/sys/class/power_supply/battery/present"

#define BATTERY_CAPACITY_PATH "/sys/class/power_supply/battery/capacity"

#define BATTERY_VOLTAGE_PATH "/sys/class/power_supply/battery/batt_vol"

#define BATTERY_TEMPERATURE_PATH "/sys/class/power_supply/battery/batt_temp"

#define BATTERY_TECHNOLOGY_PATH "/sys/class/power_supply/battery/technology"

在<DA9034驱动程序阅读笔记(6)>一文中,我已经提到drivers/power/micco_power.c里注册了充电器(ac)、 usb和电池(battery)三个power_supply。各个power_supply提供的属性和上述文件是对应的,从这些文件中可以读到充电器 (ac)、usb和电池(battery)三个power_supply的相应状态。

update然后根据读到的状态更新BatteryService的成员变量,并广播一个Intent来通知其它关注电源状态的组件。

private final void sendIntent() {

// Pack up the values and broadcast them to everyone

Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);

intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);

try {

mBatteryStats.setOnBattery(mPlugType == BATTERY_PLUGGED_NONE, mBatteryLevel);

} catch (RemoteException e) {

// Should never happen.

}

int icon = getIcon(mBatteryLevel);

intent.putExtra("status", mBatteryStatus);

intent.putExtra("health", mBatteryHealth);

intent.putExtra("present", mBatteryPresent);

intent.putExtra("level", mBatteryLevel);

intent.putExtra("scale", BATTERY_SCALE);

intent.putExtra("icon-small", icon);

intent.putExtra("plugged", mPlugType);

intent.putExtra("voltage", mBatteryVoltage);

intent.putExtra("temperature", mBatteryTemperature);

intent.putExtra("technology", mBatteryTechnology);

ActivityManagerNative.broadcastStickyIntent(intent, null);

}

关注ACTION_BATTERY_CHANGED的地方有好几个:

o KeyguardUpdateMonitor 这里主要是用来更新锁屏界面下的电池状态。还有低电警告和关机也是在这里做的。

private void handleBatteryUpdate(int pluggedInStatus, int batteryLevel) {

if (DEBUG) Log.d(TAG, "handleBatteryUpdate");

final boolean pluggedIn = isPluggedIn(pluggedInStatus);

if (isBatteryUpdateInteresting(pluggedIn, batteryLevel)) {

mBatteryLevel = batteryLevel;

mDevicePluggedIn = pluggedIn;

for (int i = 0; i < mInfoCallbacks.size(); i++) {

mInfoCallbacks.get(i).onRefreshBatteryInfo(

shouldShowBatteryInfo(), pluggedIn, batteryLevel);

}

}

// shut down gracefully if our battery is critically low and we are not powered if (batteryLevel == 0 &&

pluggedInStatus != BATTERY_STATUS_CHARGING &&

pluggedInStatus != BATTERY_STATUS_UNKNOWN) {

ShutdownThread.shutdownAfterDisablingRadio(mContext, false);

}

}

o NotificationManagerService 用来更新充电状态(LED)

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

boolean batteryCharging = (intent.getIntExtra("plugged", 0) != 0); int level = intent.getIntExtra("level", -1);

boolean batteryLow = (level >= 0 && level <= Power.LOW_BATTERY_THRESHOLD);

int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);

boolean batteryFull = (status == BatteryManager.BATTERY_STATUS_FULL || level >= 90);

if (batteryCharging != mBatteryCharging ||

batteryLow != mBatteryLow ||

batteryFull != mBatteryFull) {

mBatteryCharging = batteryCharging;

mBatteryLow = batteryLow;

mBatteryFull = batteryFull;

updateLights();

}

}

o PowerManagerService 这里主要是做两件事件,先是检查是否在充电时不允许睡眠,并采用相应的行动,其次是触发一个用户行为(会影响下一次睡眠的时间)。

private final class BatteryReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

synchronized (mLocks) {

boolean wasPowered = mIsPowered;

mIsPowered = mBatteryService.isPowered();

if (mIsPowered != wasPowered) {

// update mStayOnWhilePluggedIn wake lock

updateWakeLockLocked();

// treat plugging and unplugging the devices as a user activity. // users find it disconcerting when they unplug the device // and it shuts off right away.

// temporarily set mUserActivityAllowed to true so this will work

// even when the keyguard is on.

synchronized (mLocks) {

boolean savedActivityAllowed = mUserActivityAllowed;

mUserActivityAllowed = true;

userActivity(SystemClock.uptimeMillis(), false);

mUserActivityAllowed = savedActivityAllowed;

}

}

}

}

}

o LocationManagerService 这里似乎没有什么用处,我没找到mCollector赋值的地方。

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

log("PowerStateBroadcastReceiver: Battery changed");

synchronized (mLocationListeners) {

int scale = intent.getIntExtra(BATTERY_EXTRA_SCALE, 100);

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

boolean plugged = intent.getIntExtra(BATTERY_EXTRA_PLUGGED, 0) != 0;

// Notify collector battery state

if (mCollector != null) {

mCollector.updateBatteryState(scale, level, plugged);

}

}

}

o WifiService 根据电源状态来决定是否需要定时唤醒(没搞得太明白,看Wifi服务时再研究)。

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

/*

* Set a timer to put Wi-Fi to sleep, but only if the screen is off * AND we are transitioning from a state in which the device was supposed

* to stay awake to a state in which it is not supposed to stay awake. * If "stay awake" state is not changing, we do nothing, to avoid resetting

* the already-set timer.

*/

int pluggedType = intent.getIntExtra("plugged", 0);

if (mScreenOff && shouldWifiStayAwake(stayAwakeConditions, mPluggedType) &&

!shouldWifiStayAwake(stayAwakeConditions, pluggedType)) { long triggerTime = System.currentTimeMillis() + idleMillis; mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);

mPluggedType = pluggedType;

return;

}

mPluggedType = pluggedType;

}

o StatusBarPolicy 用来更新状态栏上的充电图标。

if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

updateBattery(intent);

}

Android手机电池信息

Android 开发技术 2009-08-09 12:22:25 阅读580 评论0 字号:大中小订阅

以下是手机电池的一些信息,很有用的。可以获得手机的好多参数。如电压,手机电量的多少,等等。

package com.android.settings;

19 import android.app.Activity;

20 import android.content.BroadcastReceiver;

21 import android.content.Context;

22 import android.content.Intent;

23 import android.content.IntentFilter;

24 import android.os.BatteryManager;

25 import android.os.Bundle;

26 import android.os.Handler;

27 import android.os.IPowerManager;

28 import android.os.Message;

29 import android.os.RemoteException;

30 import android.os.ServiceManager;

31 import android.os.SystemClock;

32 import android.text.format.DateUtils;

33 import android.widget.TextView;

34

35 import com.android.internal.app.IBatteryStats;

36

37 public class BatteryInfo extends Activity {

38 private TextView mStatus;

39 private TextView mLevel;

40 private TextView mScale;

41 private TextView mHealth;

42 private TextView mVoltage;

43 private TextView mTemperature;

44 private TextView mTechnology;

45 private TextView mUptime;

46 private IBatteryStats mBatteryStats;

47 private IPowerManager mScreenStats;

48

49 private static final int EVENT_TICK = 1;

50

51 private Handler mHandler = new Handler() {

52 @Override

53 public void handleMessage(Message msg) {

54 switch (msg.what) {

55 case EVENT_TICK:

56 updateBatteryStats();

57 sendEmptyMessageDelayed(EVENT_TICK, 1000);

58

59 break;

60 }

61 }

62 };

63

64 /**

65 * Format a number of tenths-units as a decimal string without using a

66 * conversion to float. E.g. 347 -> "34.7"

67 */

68 private final String tenthsToFixedString(int x) {

69 int tens = x / 10;

70 return new String("" + tens + "." + (x - 10*tens));

71 }

72

73 /**

74 *Listens for intent broadcasts

75 */

76 private IntentFilter mIntentFilter;

77

78 private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {

79 @Override

80 public void onReceive(Context context, Intent intent) {

81 String action = intent.getAction();

82 if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {

83 int plugType = intent.getIntExtra("plugged", 0);

84

85 mLevel.setText("" + intent.getIntExtra("level", 0));

86 mScale.setText("" + intent.getIntExtra("scale", 0));

87 mVoltage.setText("" + intent.getIntExtra("voltage", 0) + " "

88 + getString(R.string.battery_info_voltage_units));

89 mTemperature.setText("" + tenthsToFixedString(intent.getIntExtra("temperature", 0))

90 + getString(R.string.battery_info_temperature_units));

91 mTechnology.setText("" + intent.getStringExtra("technology"));

92

93 int status = intent.getIntExtra("status",

BatteryManager.BATTERY_STATUS_UNKNOWN);

94 String statusString;

95 if (status == BatteryManager.BATTERY_STATUS_CHARGING) {

96 statusString = getString(R.string.battery_info_status_charging);

97 if (plugType > 0) {

98 statusString = statusString + " " + getString(

99 (plugType == BatteryManager.BATTERY_PLUGGED_AC)

100 ? R.string.battery_info_status_charging_ac

101 : R.string.battery_info_status_charging_usb);

102 }

103 } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) {

104 statusString = getString(R.string.battery_info_status_discharging);

105 } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) {

106 statusString = getString(R.string.battery_info_status_not_charging);

107 } else if (status == BatteryManager.BATTERY_STATUS_FULL) {

108 statusString = getString(R.string.battery_info_status_full);

109 } else {

110 statusString =

111 }

112 mStatus.setText(statusString);

113

114 int health = intent.getIntExtra("health", BatteryManager.BATTERY_HEALTH_UNKNOWN);

115 String healthString;

116 if (health == BatteryManager.BATTERY_HEALTH_GOOD) {

117 healthString = getString(R.string.battery_info_health_good);

118 } else if (health == BatteryManager.BATTERY_HEALTH_OVERHEAT) {

119 healthString = getString(R.string.battery_info_health_overheat);

120 } else if (health == BatteryManager.BATTERY_HEALTH_DEAD) {

121 healthString = getString(R.string.battery_info_health_dead);

122 } else if (health == BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE) {

123 healthString = getString(R.string.battery_info_health_over_voltage);

124 } else if (health == BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE) {

125 healthString = getString(R.string.battery_info_health_unspecified_failure);

126 } else {

127 healthString =

128 }

129 mHealth.setText(healthString);

130 }

131 }

132 };

133

134 @Override

135 public void onCreate(Bundle icicle) {

136 super.onCreate(icicle);

137

138 setContentView(https://www.doczj.com/doc/5510095200.html,yout.battery_info);

139

140 // create the IntentFilter that will be used to listen 141 // to battery status broadcasts

142 mIntentFilter = new IntentFilter();

143 mIntentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); 144 }

145

146 @Override

147 public void onResume() {

148 super.onResume();

149

150 mStatus = (TextView)findViewById(R.id.status);

151 mLevel = (TextView)findViewById(R.id.level);

152 mScale = (TextView)findViewById(R.id.scale);

153 mHealth = (TextView)findViewById(R.id.health);

154 mTechnology = (TextView)findViewById(R.id.technology);

155 mVoltage = (TextView)findViewById(R.id.voltage);

156 mTemperature = (TextView)findViewById(R.id.temperature);

157 mUptime = (TextView) findViewById(R.id.uptime);

158

159 // Get awake time plugged in and on battery

160 mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService("batteryinfo"));

161 mScreenStats = IPowerManager.Stub.asInterface(ServiceManager.getService(POWER_SERVICE));

162 mHandler.sendEmptyMessageDelayed(EVENT_TICK, 1000);

163

164 registerReceiver(mIntentReceiver, mIntentFilter);

165 }

166

167 @Override

168 public void onPause() {

169 super.onPause();

170 mHandler.removeMessages(EVENT_TICK);

171

172 // we are no longer on the screen stop the observers

173 unregisterReceiver(mIntentReceiver);

174 }

175

176 private void updateBatteryStats() {

177 long uptime = SystemClock.elapsedRealtime();

178 mUptime.setText(DateUtils.formatElapsedTime(uptime / 1000)); 179

180 }

181

182 }

Android项目文档

课程代号:83308113 2014-2015学年第1学期《ISAS与项目训练(一)》 项目:Android 班级:网络2班 学号: 13734214 姓名:刘雨亭. 指导教师:温一军周洪斌 . 沙洲职业工学院 NIIT安艾艾迪

目录 一、系统简介 (3) 二、发展历程 (3) 三、发行版本 (4) 四、国内外手机应用状况 (4) 五、发展趋势 (5) 六、Android的相关技术介绍及分析 (6) 6.1、Android系统架构研究 (6) 6.2、应用程序框架 (7) 6.3、类库 (8) 七、Android的API (10) 八、Android活动的生命周期 (11)

一、系统简介 Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号,于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender 公司专门制作的称之为“Droid ”的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。 二、发展历程 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为Google公司工程部副总裁,继续负责Android项目。 2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发

Android移动设备中的传感器关键技术设计

Android移动设备中的传感器关键技术设计 摘要 随着经济的发展,Android系统在电子信息、通信系统特别是移动设备方面应用十分广泛。比如:摩托罗拉、三星等智能手机大多采用的是Android系统。 Android系统提供的加速度传感器和陀螺仪是基于硬件的传感器,其中有三个传感器既是基于硬件的也是基于软件的传感器。文章根据Android系统的五个传感器技术的应用,进行了论述研究。 一、引言 随着手机等移动设备的发展,人们对移动设备的要求不仅仅限于接打电话、QQ等传统手机功能,要求智能手机具备更加完善强大的娱乐商务功能,目前传统计算机的应用功能基本全部实现智能手机上。 Android作为一种流行系统平台,令人津津乐道的特性数不胜数,其中最为耀眼的是Android平台的各种传感器。 二、基于Android移动设备的传感器技术概述 (一)Android平台简介 Android的中文翻译是安卓,本来的意思是机器人,是Google公司基于Linux 自由及开放代码的操作系统,这种操作系统较好的整合应用软件、用户界面、操作系统和中间件,打造了一个移动终端开放完整的移动软件,在2007年11月5日正式开发成功面试。Android(安卓)最初是由Andy Rubin开发的一种操作系统,主要支持的移动设备是手机。2005年8月,Google收购安卓并未安卓注资,2007在Google的领导下改良Android系统,使Android成为一种基于Linux自由及开放代码的操作系统,除了支持智能手机还支持平板电脑等移动设备。Android 是完全开放的操作系统,它的迅速发展使其发展趋势趋向多元化,Google公司强大的互联网功能和服务优势,Android的移动技术应用的前景非常美好。 (二)基于Android平台传感器概述 传感器是被测量信号输入的第一道关口,是传感器系统中的元件组成部分,它包括载体和电路连接的敏感元件和转换元件,但是传感器系统却是组合某种信息处理能力元件的传感器。传感器是一种检测装置,是实现移动设备自动控制、自动检测的前提装置。Android平台应用的传感器技术有姿态传感器技术、光电传感器技术、磁场传感器技术和加速度传感器技术等诸多耀眼的传感器技术,传感器系统功能非常强大,为用户提供了巨大的便利。 三、基于Android移动设备的传感器技术应用 (一)基于Android移动设备的加速度传感器技术应用

Android项目打包成apk

Android开发把项目打包成apk 做完一个Android项目之后,如何才能把项目发布到Internet上供别人使用呢?我们需要将自己的程序打包成Android安装包文件--APK(Android Package),其后缀名为".apk"。将APK文件直接上传到Android模拟器或Android手机中执行即可进行安装。Android系统要求具有其开发者签名的私人密钥的应用程序才能够被安装。生成数字签名以及打包项目成APK都可以采用命令行的方式,但是通过Eclipse中的向导我们会更加方便地完成整个流程,打包发布的过程非常简单。下面以前面开发的"Hello World"为例,演示如何生成APK。 右键单击项目名称,选择"Android Tools",再选择"Export Signed Application Package…",如下图所示。 进入左图所示页面,单击"Next>"按钮,进入如右图所示窗口。

其中,Location为证书库将要存放的位置,Password是证书库的密码。 打包程序时,系统要求使用数字证书。如果没有数字证书,我们选择"Create new keystore"新创建一个证书库,单击"Browse…"按钮选择证书库将要保存的位置并填入信息,如左图所示。单击"Next>"按钮,如右图所示。 其中,Alias是该证书的名字;password是该证书的密码;Validity是指定证书有效

年份。 如果已经拥有一个证书,那么可以选择"Use existing keystore",之后直接定位到证书库的位置并填入密码,如左图所示,接下来填入密码,单击"Next>"按钮,如右图所示。 单击"Browse…"按钮,选择文件保存的位置,如下图所示。 "Destination APK file "指定APK存储的位置。单击"Finish"按钮,打包完成。

总结android项目的基本开发步骤

总结android项目的基本开发步骤 做了几个android企业应用项目后,总结了项目的基本开发步骤,希望能够交流。一应用规划: -确定功能。 -必须的界面及界面跳转的流程。 -需要的数据及数据的来源及格式。 -是否需要服务端支持。 -是否需要本地数据库支持。 -是否需要特殊权限。 -是否需要后台服务。 二架构设计: -分层。 -网络连接。 -数据处理-xml、domain。 -封装Activity。 三界面设计: -主界面确定。 -模块界面、列表、查看、编辑界面。 -菜单、按钮、对话框、提示信息。 -界面总体颜色。 四数据操作和存储: -数据来源。 -数据类型。 -存储方式。 五业务实现: -客户端业务解析。 六页面跳转: -每个页面间的跳转。 -菜单、按钮、事件等。 #开发之前还需要做一些准备工作 1.技术储备 a.Java 重要程度:????? -框架,编程思想,编码规范,设计模式等 b.Xml 重要程度:???? -布局,选择器,配置文件等 c.数据库重要程度:??? -关系型数据库,SQLite

2.开发工具 a.Eclipse或者AndroidStudio b.Android SDK c.其他:svn / git,JDK,资源,数据库,模拟器,真机等 #开发过程中还有以下的一些流程 1.多种开源框架和优秀源码的引用 -xUtils,Volley,Vitamio,SlidingMenu等 2.数据访问 -访问框架 -传递方式 3.多种API的接入 -短信服务 -即时通信 -消息推送 -第三方登录等 4.后台开发 -后台的开发,为app提供接口 -后台的云服务器 5.内存优化 -垃圾回收 -一、二级缓存 -适配器的优化 -图片框架及资源的优化 6.多线程异步 -Handler -Asynctask 7.屏幕适配 #开发基本结束之后还有很多需要流程 1.多型号真机实测 2.云服务器优化 3.APK加密 4.数字签名 5.用户协议 6.应用平台 7.项目上线 8.应用推广和广告插入 9.版本更新和维护

判断android设备是平板还是手机

判断是平板还是手机,通过很多的方式都可以实现,如:设备尺寸、DPI、版本号、是否具备电话功能等,不过有些没有那么的精准,这里有一个比较简单的方法: 方法一、 public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } 方法二、 /** * 判断是否为平板 * * @return */ private boolean isPad() { WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); // 屏幕宽度 float screenWidth = display.getWidth();

// 屏幕高度 float screenHeight = display.getHeight(); DisplayMetrics dm = new DisplayMetrics(); display.getMetrics(dm); double x = Math.pow(dm.widthPixels / dm.xdpi, 2); double y = Math.pow(dm.heightPixels / dm.ydpi, 2); // 屏幕尺寸 double screenInches = Math.sqrt(x + y); // 大于6尺寸则为Pad if (screenInches >= 6.0) { return true; } return false; } 如上两种方法就可以判断了。

Android项目开发报告

目录 1 项目简介 (2) 2 开发环境 (2) 2.1Android 平台结构介绍 (2) 22 MVC 框架 (3) 3 功能介绍 (3) 3.1 登录 (3) 3.2 注册 (3) 3.3添加 (4) 3.4 查询 (5) 3.5主页面 (6) 4 数据库结构 (7) 4.1 数据表设计 (7) 5 项目结构 (7) 5.1 src 文件夹 (7) 52 gen 文件夹 (7) 5.3 libs 文件夹 (8) 5.4 bin 文件夹 (8) 5.5 res 文件夹 (8) 5.6 AndroidManifest.xml (8) 6 项目总结 (8)

Android 项目开发报告 1 项目简介 本次中软培训主要是关于android 的基本应用开发,培训的任务主要是开发一个与日常生活花费有关的现金日记账软件,由于时间紧张此软件只实现了登录、注册、添加、查询等功能,未涉及细节处理。此次项目开发主要是帮助大家培养理财观念,清楚直白的了解每笔前是怎么消费,何时消费掉的,利于节约一部分开支。 2 开发环境 2.1Android 平台结构介绍 Android 系统架构和其操作系统一样,采用了分层的架构。Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux 核心层。 开发人员可以完全访问核心应用程序所使用的API 框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 应用程序。Android 会同一些核心程序包一起发布,包括日历、地图、浏览器等。所有的应用程序均是用Java 语言编写。 应用程序框架。这种框架可以使开发人员可以完全的访问核心程序所使用 的API 框架,简化了组件的使用。同时也使用户可以方便的替换程序组件。 系统运行库。An droid包含一些C/C++库,这些库能被An droid系统中不同的组件使用。一般情况下如果要将Android 移植到其他硬件去运行,只需要实现这部分代码即可。Android 也包括了一个核心库,该核心库提供了Java 编程语言核心库的大多数功能。 Linux 内核。Android 的核心系统服务依赖于Linux 2.6 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux 内核也同时作为硬件和软件栈之间的抽象层。2.2 MVC 框架 MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制

android项目心得体会.doc

android项目心得体会 篇一:Android实训心得 Android实训心得 刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的AndroidSdK开发范例大全中的例子以及Android提供的APIdEmoS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。 我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。 通过半个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。 通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过bundle对数据在界面之间进行

传输。 在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentActivity这个变量进行控制,进行处理。 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android 系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,cc++高级编程才能深入的涉及Androidframework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。 由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对Sd卡存取需要权限,在写SqL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。 通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据

Android设备节点

第1章Android设备节点的创建 在编写linux设备驱动程序的时候,很多时候都是利用mknod命令来手动创建设备节点的,带上名字和主次设备号就可以在/dev目录下生成设备节点。同样Android沿用了linux内核,很多设备驱动的节点是又是什么时候创建的呢? 在kernel自解压模块加载完成之后,会去运行android第一个应用程序init。在init.c的 在之前解析init.rc脚本的时候,service会被放在service_list的链表里。接下来就是要执行

Android的服务不是选项不是disabled并且带core和main的选项的服务都是需要开机自动加载的服务。而ueventd是由system/core/init/ueventd.c编译而成的。 System/core/init/ueventd.c int ueventd_main(int argc, char **argv) { …… ueventd_parse_config_file("/ueventd.rc"); …… snprintf(tmp, sizeof(tmp), "/ueventd.%s.rc", hardware); ueventd_parse_config_file(tmp); …… device_init(); …… while(1) { ufd.revents = 0; nr = poll(&ufd, 1, -1); if (nr <= 0) continue; if (ufd.revents == POLLIN) handle_device_fd(); } } Ueventd的main函数做的事情比较多,首先是要解析根文件系统下的ueventd.rc以及ueventd.

使用电脑控制Android手机教程

手机控【Total Control】,新款创新型PC控制Android手机软件 不知道朋友们在玩手机的时候有没有这种感觉,有时候,越看自己的手机屏幕就越觉得小,这就好比人们喜欢跑到电影院看大屏的电影一样,大屏幕带给人的视觉体验总是让人印象深刻。而今,大屏幕的手机也越来越流行,人们对大屏幕大视觉的“野心”也在不断扩张。想象一下,在你21寸的显示屏上玩“水果忍者”,“愤怒的小鸟”…. 那么怎样才能满足你手机屏幕扩张的“野心”呢?在这里给大家推荐一款超级实用的能满足各位“野心”的软件吧~ 在电脑上轻松掌控Android手机设备的软件,全新的超简洁界面,集合多项独有功能,操作顺畅,设置简单;Android手机无需Rooting,即插即用;快速将手机屏幕信息传送至PC并实时监控;轻松实现手机触摸屏和按键控制;重点优化产品性能,轻松扩大屏幕范围,让手机完完全全的被控制起来。帮您轻松实现:利用PC观看手机视频;利用PC操作手机编辑文档发送短信;利用投影仪展示手机和应用;对手机屏幕进行录制回放。 使用过程中发现,它不仅扩大了手机屏幕,支持在电脑上操作手机屏幕,还有很多其他的很特别的功能!下面就将部分主要功能给大家作个简单的介绍。 首先,下载PC端应用程序Total_Control_5.0.0_Install.exe,安装后启动程序如下: 如第一次连接可能会出现驱动问题,可根据新设备连接向导一步步解决,

驱动安装后会出现连接,现在可以成功连接手机了:

同样也可以通过wifi直接连接,直接输入手机ip地址点立即连接,也可添加密码保护, 连接后进入如下界面,新版Total Control帧率能在30以上,传输速度慢,延迟久的问题很少出现

Android项目开发报告

目录 1项目简介 (2) 2开发环境 (2) 2.1Android平台结构介绍 (2) 2.2 MVC框架 (3) 3功能介绍 (3) 3.1登录 (3) 3.2注册 (3) 3.3添加 (4) 3.4查询 (5) 3.5主页面 (6) 4数据库结构 (7) 4.1数据表设计 (7) 5项目结构 (8) 5.1 src文件夹 (8) 52 gen文件夹 (8) 5.3 libs文件夹 (8) 5.4 bin文件夹 (8) 5.5 res文件夹 (8) 5.6 AndroidManifest.xml (9) 6项目总结 (9)

Android项目开发报告 1项目简介 本次中软培训主要是关于android的基本应用开发,培训的任务主要是开发一个与日常生活花费有关的现金日记账软件,由于时间紧此软件只实现了登录、注册、添加、查询等功能,未涉及细节处理。此次项目开发主要是帮助大家培养理财观念,清楚直白的了解每笔前是怎么消费,何时消费掉的,利于节约一部分开支。 2开发环境 2.1Android平台结构介绍 Android系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux 核心层。 开发人员可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 应用程序。Android会同一些核心程序包一起发布,包括日历、地图、浏览器等。所有的应用程序均是用Java语言编写。 应用程序框架。这种框架可以使开发人员可以完全的访问核心程序所使用的API框架,简化了组件的使用。同时也使用户可以方便的替换程序组件。 系统运行库。Android包含一些C/C++库,这些库能被Android系统中不

安卓手机设备性能排名

安卓设备性能排名 2 Oneplus GM1917 2179 3 265685 3 LG LM-G820 2168 4 255882 4 Oneplus GM1910 2161 5 242020 5 Oneplus GM1915 21602 266759 6 Oneplus GM1913 21544 257459 7 小米MI 9 20277 248084 8 三星SM-G975W 20256 257192 9 Oneplus GM1900 20066 266508 10 华硕ASUS_I01WD 19934 247390 11 Vivo V1824A 19774 260634 12 三星SM-G975U1 19541 253729 13 Razer Phone 2 19438 243489 14 三星SM-G975U 19303 256065 15 三星SM-G973U 19142 258373 16 华为ELE-L29 19061 246172 17 华为Mate 20 Pro (Various Models) 18979 243136 18 三星SM-G973U1 18623 263649 19 三星SM-G970U1 18606 261644 20 华为VOG-L09 18497 244358 21 三星SM-G970U 18475 244685 22 华为PCT-L29 18387 241458 23 华为EVR-L29 18185 238078 24 华为VOG-L29 17922 241358 25 华为Mate 20 17853 233042 26 三星SM-G975F 17677 209911 27 三星SM-G977B 17400 217586 28 三星SM-G973F 17068 210912 29 Sony H9436 17060 230556

40个Android开源项目

GitHub上最火的40个Android开源项目(一) GitHub上最火的40个Android开源项目(一) GitHub上最火的40个Android开源项目(二) GitHub上最火的74个Android开源项目(三) GitHub上最火的40个iOS开源项目(一) GitHub上最火的40个iOS开源项目(二) GitHub在中国的火爆程度无需多言,越来越多的开源项目迁移到GitHub平台上。更何况,基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。 下面,就让我们一起来看看,在GitHub平台上,究竟有哪些Android开源项目最火,也最受开发者欢迎。 1.ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所有版本的Android动作栏的设计模式。

对于Android 4.0及更高版本,ActionBarSherlock可以自动使用本地ActionBar实现,而对于之前没有Act ionBar功能的版本,基于Ice Cream Sandwich的自定义动作栏实现将自动围绕布局。能够让开发者轻松开发一款带动作栏(Actio n bar)的应用,并且适用于Android 2.x及其以上所有版本。 详情请参考:ActionBarSherlock 2.facebook-android-sdk Facebook SDK for Android是一个开源库,允许开发者将Facebook集成到所开发的Andr oid应用中。 如果想要获取更多关于示例、文档、将SDK集成到App中、源代码等信息,可直接登陆Face book Developers查看。 3.SlidingMenu(SlidingMenu Demos)

外媒评2010年10款最酷Android设备

外媒评2010年10款最酷Android设备 美国科技网站CRN日前评选出了2010年10款最酷的Android设备。三星Galaxy Tab平板电脑和摩托罗拉Droid X手机均榜上有名。市场研究公司Canalys发布的数据显示,谷歌Android手机在今年第二季度全球销售量同比增长886%。Android已经成为全球增长速度最快的手机操作系统,从智能手机到平板电脑等大量设备均使用该平台。 以下为今年市场上10款最酷的Android设备: 1、摩托罗拉Droid X手机 摩托罗拉Droid X手机 摩托罗拉在2009年宣布支持谷歌Android平台,并承诺将利用Android平台发布多款Android手机。摩托罗拉在去年秋天推出首款Droid手机,并在今年推出了Droid 2和Droid X两款Droid手机。

摩托罗拉Droid X采用4.3英寸屏幕,具有720p视频捕捉能力,并配有HDMI输出、1 Ghz处理器、8 GB存储、16-GB microSD卡以及800万像素摄像头。Droid X 并未配备物理键盘,Droid X拥有Swype输入软件、3G Mobile Hotspot、搭载Andro id 2.2系统、以及包括从Skype到Blockbuster的一系列内容选项。 尽管此后市场上出现了多款技术上更为先进的智能手机,但摩托罗拉Droid X手机将作为首批Droid手机而被用户所牢记。 2、三星Galaxy Tab平板电脑 三星Galaxy Tab平板电脑 三星Galaxy Tab平板电脑能抢占苹果iPad平板电脑的市场份额吗?三星当然有此打算。三星在今年9月举行的发布会上推出了Galaxy Tab平板电脑 三星Galaxy Tab重0.8磅,配有7英寸触摸屏,可以收看高清电视和电视节目,G alaxy Tab具有阅读电子书、进行视频电话、Swype输入法和导航功能。

Android项目开发实训项目总结报告

Android项目开发 实训报告 姓名:赵炳琪 学号: 140840131 专业:软件技术 项目名称: Android手机记账本 指导教师:陈雪莲 实训日期:2016年10月30日至2016年12月30日2016年12月 25日

Android项目开发实训记录单

目录 第一章概述 (1) 第二章需求分析 (2) 2.1 项目背景 (2) 2.2 项目需求 (2) 第三章相关技术 (4) 3.1 Adnroid平台介绍 (4) 3.2 关键技术研究 (6) 第四章概要设计 (9) 4.1 系统体系结构 (9) 4.2 用户界面设计 (14) 4.2.1计算器界面 (14) 4.2.2小数点运算界面 (14) 4.2.3负数运算界面 (15) 4.2.4开方运算界面 (15) 第五章详细设计 (16) 5.1数据输入模块 (16) 5.2数据显示模块 (16) 5.3 数据计算功能模块 (16) 第六章结论 (26)

第一章概述 随着社会的发展,经济水平的提高,手机越来越普及。同时伴随着已送慧联网技术的发展,手机的功能也变得越来越丰富。从原来只具有简单通信功能的非智能手机到现在具有手机操作系统,除通话功能以外,还集上网、聊天、炒股、收发邮件等功能于一身的智能手机系统。 由Google公式牵头众多实力雄厚的软硬件厂商加盟商成立了OMS联盟,病退出的Android 平台手机系统,作为时代的新生儿,Android手机操作平台有着得天独厚的优势广阔的发展前景。 而计算器作为现在人们日常生活中常用的一种工具也已经可以说是人们日常生活中必不可少的工具了。计算器的发展同样经历了漫长的过程,凝聚无数仙人的智慧,甚至连计算机的发展都可以说是源于计算器的发展。本程序正式基于Android平台开发的计算器。 本课题要求:设计一个基于Android的计算器的软件。实现的功能有: 具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有退格功能,能够删除最后一个输入,具有清除功能,即“C”。因为打开(ON)、关闭(OFF)屏幕按键的功能 需重点研究的关键问题:计算器的运算和显示问题。

好程序员_项目介绍android

项目1 网上厨房 项目简介: 传统的家庭主妇做饭套路是:痛苦的思考今晚吃什么菜,翻开菜谱查看怎么做,然后去买相应得到材料,按照步骤做晚饭。“网上厨房”的做法是,打开冰箱看看家里有什么食材,把他们的关键字输入“网上厨房”,在搜索了超过几万份菜谱后,你马上知道该吃什么,怎么做! 项目特点: a)ViewPager的使用: 在目前的UI开发过程当中,如何更好的利用屏幕是一个最主要的课程, 在本项目当中,使用了ViewPager作为界面的基本组织方式,为用户提 供了更好的使用体验; b)图片二次采样: 在项目当中,UI需要展示大量的图片,而手机内存有限,为了保证应用 程序内容使用控制在一定的范围之内,采用二次采样的方法降低图片所 占用的内存数量; c)XMPP; 为了更好的实现软件的商业价值,本项目每天会向客户端推送一条菜谱 信息,该功能使用全球通用XMPP推送协议实现。 项目截图:

项目2 瞭望电子杂志 项目简介: 该关键是某知名新媒体手机客户端,作为大陆发行量最大的新闻类周刊,本客户端利用权威的新闻资源和高端的影响力,致力于为广大客户提供最好的新闻浏览体验。 本客户端提供有观点的新闻,即使更新,在信息碎片化的时代,为用户提供有深度和洞察力的新闻。 项目技术点: a)HTTP协议通信技术; 本项目采用HTTP协议与服务器端通讯,在出现文字与图片混排时使用 异步加载提升系统响应速度,增强用户体验; b)图片缓存技术: 目前3G流量的收费还比较昂贵,而本客户端需要从服务器下载大量的 图片和文本信息,为了减少流量的消耗,本程序采用了强引用、软引用 和SDCard三层缓存来减少图片加载的消耗,与此同时进一步加强了软 件的运行速度 c)pdf解析: 该软件支持需要从服务器下载每一期的电子杂志,需要手机端对PDF格 式的文件进行解析和显示; 项目截图:

安卓项目说明文档

天女散花效果项目说明 一、项目概述 在Android 实现应用屏幕一定时间间隔下,随机出现多片花朵的效果,并同时播放天女散花音乐。 二、项目功能模块图 功能模块图(一) 动态绘制窗体内容 背景音乐的添加 加载图片到内存 功能模块图 自定义VIEW

功能模块图(二) 三、关键实现技术: 1)自定义View 自定义view 主要是处理界面需要动态处理的情况,自定义view 主要继承与android.view.View 类 下面是自定view 的实例 public class flowersView extends View { /** * 构造器 */ public flowersView(Context context, AttributeSet attrs, int defStyle) { super (context, attrs, defStyle); } public flowersView(Context context, AttributeSet attrs) { super (context, attrs); } @Override public void onDraw(Canvas canvas) { super .onDraw(canvas); 动态绘制窗体内容 动态生成五个花朵位置 根据花朵的位置重新的渲染窗体

} } 2)加载图片到内存 在这个小应用中,会重复的出现多个花朵的图片,为节省内存,直接在应用开始时,直接将图片转化成内存的对象,在其后页面渲染时,直接用内存的对象 下面是加载图片到内存的实例 //花图片 Bitmap bitmap_flower =null; /** * 加载天女散花的花图片到内存中 * */ public void LoadFlowerImage() { Resources r = this.getContext().getResources(); bitmap_flower= ((BitmapDrawable) r.getDrawable(R.drawable.flower)).getBitmap(); } 3)动态绘制窗体内容 动态绘制窗体内容分两块 a.动态生成五个花朵 //花的位置 private Coordinate[] flowers=new Coordinate[5]; //屏幕的高度和宽度 int view_height= 0; int view_width= 0;

Android项目开发报告

A n d r o i d项目开发报告 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

目录

Android项目开发报告 1项目简介 本次中软培训主要是关于android的基本应用开发,培训的任务主要是开发一个与日常生活花费有关的现金日记账软件,由于时间紧张此软件只实现了登录、注册、添加、查询等功能,未涉及细节处理。此次项目开发主要是帮助大家培养理财观念,清楚直白的了解每笔前是怎么消费,何时消费掉的,利于节约一部分开支。 2开发环境 平台结构介绍 Android系统架构和其操作系统一样,采用了分层的架构。Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 开发人员可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 应用程序。Android会同一些核心程序包一起发布,包括日历、地图、浏览器等。所有的应用程序均是用Java语言编写。

应用程序框架。这种框架可以使开发人员可以完全的访问核心程序所使用的API框架,简化了组件的使用。同时也使用户可以方便的替换程序组件。 系统运行库。Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。一般情况下如果要将Android移植到其他硬件去运行,只需要实现这部分代码即可。Android也包括了一个核心库,该核心库提供了Java编程语言核心库的大多数功能。 Linux内核。Android的核心系统服务依赖于Linux 内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的抽象层。 MVC框架 MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。 MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet + javabean 的模式。 3功能介绍 登录 功能描述 用户登陆系统的窗口,如果信息有误,系统提示用户名或密码错误。功能实现

Android项目计划书

Android项目实施计划书 Android个人小工具开发计划,包括随身日记本,旅游查询,星座查询等个人手机应用 Android小组 2010/12/13

项目实施计划书 项目名:Android小工具阶段:调研 文档编号:D50601 制作日期:2010/12/13 使用权限 在此文档中签字后,将约定森纵教育项目组与中北大学客户之间的调研内容确定。 本文档将保存最终签字版本。 制作人: Android项目组日期: 2010/12/13 审核人: 时允田SUNZONE Android项目组日期: 2010/12/13 在文档签字后将确定森纵教育与中北大学软件学院业务范围。 签字: 签字 日期:

修订记录 1.0 制作2010/12/13 修改编号修改页数及内容修改日期

i.项目概要: 此次Android个人桌面小工具开发主要目的是使个人手机用户界面得到更好的应用,通过此工具可以更方便的打开譬如日记本、随身旅游查询、星座查询,丰富手机界面,提高行动效率。 1.客户名 董理/时允田 2.实行期间 项目的总实行期间:2010.12.13—2010.12.31 3.项目目的及期待效果 通过该桌面应用小工具的成功,提高了手机桌面应用,丰富了手机界面,安装此小工具的用户能够更加方便随时记录身边事情和个人心情,传至网络与大家齐分享;亦可查询星座休闲娱乐;更方便查询各个地区的旅游景点,高效出行,节省时间,让生活更加时尚,简洁,效率。 4.项目开发范围定义 此次Android项目范围定义为多功能日记本、旅游出行查询、星座查询 等三个小工具应用。

多功能日记本日记本记录管理增删改查功能日记心情涂鸦随时网络上传 星座查询星座信息查询查询票价、地点景点人文,历史自动推荐 旅游查询各地旅游景点查询 星座信息介绍 用户性格优缺点分析前程查询、姻缘速配 5.项目投入总工时:3周ii.项目组织 1.组织图

Android项目开发实训项目总结报告

实训报告 姓名:祝 新 学号: 1144131 专业:软件技 术 课程名称: android实 训 项目名称:闹 铃 指导教师:王皓 实训日期: 2013年10月28日至 2014 年 1 月2

日 2014年 1月 2 日

目录 第一章概述 (1) 第二章需求分析 (2) 2.1 项目背景 (2) 2.2 项目需求 (2) 第三章相关技术 (3) 3.1 Adnroid平台介绍 (3) 3.2 关键技术研究 (3) 第四章概要设计 (4) 4.1 系统体系结构 (4) 4.2用户界面设计 (4) 第五章详细设计 (9) 5.1 添加闹铃功能模块 (9) 第六章结论 (19)

第一章概述 本课题要求:设计一个基于Android的位置闹钟的软件。实现的功能有: a) 能在Android上利用其提供地相关API获取位置信息。 b) 能通过界面设置闹钟的启动条件,包括入场与出场条件的设 c) 建立后台服务进程,监查位置信息,当满足触发条件时,闹钟响应相应事件。 需重点研究的关键问题:通过Android Api获取位置信息,并在指定地点设置闹钟提醒。 解决思路:在界面里显示当前位置信息(经纬度值),并输入指定地点的经纬度值,编程实现对位置信息实时更新,将两者的经纬度转换为距离,如在误差围则启动闹铃功能。

第二章需求分析 2.1 项目背景 移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。搭载安卓操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。开放的源代码和零成本已经让安卓在全世界围受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持,2011年安卓系统的市场份额已经超过Symbian,成为全球第一大智能手机操作系统。 GPS产业从军用转入民用后,正在逐渐向普通消费群体发展,作为使用终端的GPS产品正逐渐的深入人们生活得各个领域。GPS使用终端最主要的应用方面主要体现在各种接收器,比如航空、航海用途的接收器,汽车导航设备,或用于登上、远足的手持接收器等终端产品。GPS接收终端的结构包括,接收天线、芯片组、电池等,以及外部按键和液晶面板等相关零部件。 该课题实现在手机操作系统Android上将GPS导航和闹钟提醒两个功能结合起来,携带方便,并能超越传统的时间闹钟提醒功能,使用起来灵活、快捷、省心,是一款实用而且高端的手机软件。 2.2 项目需求 “位置闹钟”是一款提醒你地点的软件,它通过地图指定提醒的目的地,同时要求定位精确、使用过程可用Wifi(节省手机流量)和普通无网络。 “位置闹钟”可以通过GPS定位和手机蜂窝基站定位两种定位方式来监测

Android项目开发模板

文档说明书 一、前言 (3) 1.1项目介绍 (3) 1.2名词解释 (3) 1.3参考资料 (3) 二、需求概述 (3) 三、用户特点 (4) 3.1用户用例图 (4) 3.2适用人群 (4) 四、假定和约束 (4) 五、需求规定 (4) 5.1对功能的规定 (4) 5.2对性能的规定 (4) 5.3输入输出要求 (4) 5.3数据管理能力要求 (4) 5.3故障处理要求 (4) 5.3其它专门要求 (4) 六、功能结构图 ................................................................ 错误!未定义书签。 6.1功能介绍 (7) 6.2功能业务总流程图 (7) 七、功能需求分析 ............................................................ 错误!未定义书签。 7.1数据流图 (8) 7.1.1顶层数据流图 (8) 7.1.2功能级数据流图 (9) 7.1.3详细数据流图 (10) 7.2功能模块 (11) 7.2.1业务功能描述 (11) 7.2.2业务流程图描述 (11)

7.2.3相关角色及其执行的活动 (11) 7.2.4流程涉及步骤说明 (12) 7.2.5功能模块流程图 (13) 7.2.6流程涉及相关数据及规则 (13) 八、系统使用的软件与硬件环境说明............................... 错误!未定义书签。 8.1核心技术 (14) 8.2硬件环境与服务器环境: (14) 8.3客户端操作系统: (14) 九、原型界面.................................................................... 错误!未定义书签。 文档管理信息表 文档修改记录表

相关主题
文本预览
相关文档 最新文档