从开始接触OPhone平台到今天,刚刚好整一年的时间。这个时间并非我算出来,而是从解决编译过程中报的一个错误得到的。在解决了这个问题的同时,我想何不把自己在这一年当中遇到的一些问题的解决办法和大家一起分享呢?大家一起进步,一起让OPhone平台的软件丰富起来。
先说下一年的时间是怎么算出来的。我打开以前的工程,编译的时候报了一个错误。
错误信息: [2010-09-28 13:25:03 - TestNetWork] Error generating final archive: Debug certificate expired on 10-09-28 上午09:35!]
看提示的信息应该是Debug的证书过期。通过查资料得知,OPhone要求所有的应用程序必须签名后才可以安装。这个我是知道的,在发布软件的时候都必须要签名后才能发布。但是Debug这个Key是系统自动生成,默认的有效期为一年,所以才会报出上面的错误。解决办法,删除掉这个Key文件,Key的路径可以在Windows->Preference->Android->Build中获取到。删除后系统会自动再生成一个有效期为一年的Key文件。
问题1: 界面的控件过多,无法在一个View当中完整显示
手机由于屏幕尺寸的限制,在进行UI设计的时必须进行针对化设计。总的原则就是简介实用。但是由于应用场景的不同,具体到界面的设计也没办法一概而论。
在OPhone SDK 1.0版本中,EditText控件会被弹出的输入法界面挡住。如果不对界面进行处理,用户输入时无法看到输入的内容,大大降低了用户体验。不过这个问题已经在1.5版本的SDK里面得到了解决。
(调整前) (调整后)
解决办法:使用ScrollView,用户可以通过上下拖动调整界面的现实区域
<ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content">
//其他界面控件
</ScrollView>
问题2: 如何检测磁盘
- 手机是否插入SD卡
static public boolean externalMemoryAvailable()
{
return android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
}
- 检测SD卡可用的容量大小(以字节为单位)
static public long getAvailableExternalMemorySize()
{
if(externalMemoryAvailable())
{
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
else
{
return -1;
}
}
- 检测SD卡总的容量大小(以字节为单位)
static public long getTotalExternalMemorySize()
{
if(externalMemoryAvailable())
{
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
else
{
return -1;
}
}
- 检测手机自带内存容量大小
static public long getTotalInternalMemorySize()
{
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
- 检测手机自带内存可用容量大小
static public long getAvailableInternalMemorySize()
{
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
问题3:如何检测网络状态
public boolean isNetworkAvailable()
{
Context context = getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null)
{
return false;
}
else
{
NetworkInfo[] info=connectivity.getAllNetworkInfo();
if (info != null)
{
for (int i = 0; i < info.length; i++)
{
if (info[i].getState() == NetworkInfo.State.CONNECTED)
{
return true;
}
}
}
}
return false;
}
问题4:如何打开和关闭wifi
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifi.setWifiEnabled(enabled);
问题5:如何禁止程序自动转屏幕
修改AndroidManifest.xml文件,添加android:screenOrientation和android:configChanges字段
<activity android:name=".TestNetWork"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation" >
</activity>
问题6:如何让手机震动
在Market上,看到有一个按摩器的软件。觉得挺好的,下载下来看后才知道,就是让手机一直有规律的震动而已。-.-!
void PlayShake()
{
Vibrator vibrator = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(3000);
}
问题7:如何判断GPS是否有效
public boolean locactionServiceAvaiable()
{
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
List<String> providers = lm.getProviders(true);
if(providers.size()>0) return true; else return false;
}
总结:
上面只是列出了一些在OPhone平台上开发所遇到的一些常见问题的解决办法,有些代码是来自网络,仅为初学者提供一些帮助。也希望大家能够分享自己的开发经验,互相学习,共同进步。