一、Splash界面窗口没有标题没有任务栏
// 设置窗口特性为:NO_TITTLE(无标题)
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.splash_activity);
// 设置窗口全屏幕
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
二、在Splash界面显示的时候显示两秒钟的透明度动画(AlphaAnimation)
// 初始化动画效果 从0.0f 全透明(0.0f)->全不透明(1.0f)
AlphaAnimation animation = new AlphaAnimation(0.0f, 1.0f);
// 设置动画渐变时间 为2000ms 2s
animation.setDuration(2000);
// 为该线性布局文件开启动画
((LinearLayout) findViewById(R.id.splash_activity))
.startAnimation(animation);
三、将资产文件夹(res/assert/)中的文件拷入到数据文件夹(data/data/com.example.phoneguard/files/)下
private void copyDB(String fileName) {
File dbFile = new File(getFilesDir(), fileName);
if (!(dbFile.exists() && dbFile.length() > 0)) {// 不是(文件已经存在并且可用)F,不需要拷贝
try {
InputStream is = getAssets().open(fileName);
OutputStream os = new FileOutputStream(dbFile);
int len;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
if (os != null) {
os.close();
os = null;
}
if (is != null) {
is.close();
is = null;
}
Toast.makeText(this, "INIT...数据库已经拷入到应用数据目录下...", 1).show();
} catch (IOException e) {
e.printStackTrace();
}
} else {
Toast.makeText(this, "DONE...数据库已经拷入到应用数据目录下...", 1).show();
}
}
四、在Splash界面上显示清单文件中的版本信息
/**
*
* @return 程序清单文件下配置的程序的版本号 如:version 1.0.1:1
*/
public String getVersion() {
PackageManager packageManager = getPackageManager();
try {
PackageInfo packageInfo = packageManager.getPackageInfo(
getPackageName(), 0);
return "version " + packageInfo.versionName + ":"
+ packageInfo.versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
return getResources().getString(R.string.unkonwn_version);
}
}
五、判断桌面上是否已经存在快捷图标
/**
* 判断桌面是否已添加快捷方式
*
* @param cx
* @param titleName
* 快捷方式名称
* @return
*/
public static boolean hasShortcut(Context cx) {
boolean result = false;
// 获取当前应用名称
String title = null;
try {
final PackageManager pm = cx.getPackageManager();
title = pm.getApplicationLabel(
pm.getApplicationInfo(cx.getPackageName(),
PackageManager.GET_META_DATA)).toString();
} catch (Exception e) {
}
final String uriStr;
if (android.os.Build.VERSION.SDK_INT < 8) {
uriStr = "content://com.android.launcher.settings/favorites?notify=true";
} else {
uriStr = "content://com.android.launcher2.settings/favorites?notify=true";
}
final Uri CONTENT_URI = Uri.parse(uriStr);
final Cursor c = cx.getContentResolver().query(CONTENT_URI, null,
"title=?", new String[] { title }, null);
if (c != null && c.getCount() > 0) {
result = true;
}
return result;
}
六、在桌面上添加快捷图标
/**
* 为当前应用添加桌面快捷方式
*
* @param cx
* @param appName
* 快捷方式名称
*/
public static void addShortcut(Context cx) {
Intent shortcut = new Intent(
"com.android.launcher.action.INSTALL_SHORTCUT");
Intent shortcutIntent = cx.getPackageManager()
.getLaunchIntentForPackage(cx.getPackageName());
shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
// 获取当前应用名称
String title = null;
try {
final PackageManager pm = cx.getPackageManager();
title = pm.getApplicationLabel(
pm.getApplicationInfo(cx.getPackageName(),
PackageManager.GET_META_DATA)).toString();
} catch (Exception e) {
}
// 快捷方式名称
shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
// 不允许重复创建(不一定有效)
shortcut.putExtra("duplicate", false);
// 快捷方式的图标
Parcelable iconResource = Intent.ShortcutIconResource.fromContext(cx,
R.drawable.ic_launcher);
shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
cx.sendBroadcast(shortcut);
}
七、高级设置开发初步
a) 自定义一个控件(自定义控件开发在其他文章中有提到)。并将该控件的开关状态持久化到SharedPreferced文件中。Splash界面根据该状态决定是否联网查找更新包