1、问题:在一般的程序中(比如:HelloWorld)中按下音量键,调整的是铃声音量,而非多媒体音量,有时我们在开发游戏的过程中,需要调整游戏音量,即背景音乐或者游戏音效,当游戏背景音乐播放的时候,按下音量键,调整的是多媒体音量,不播放时,调整的就是铃声音量,但是一般的游戏中,我们的需求是,进入游戏之后,无论背景音乐是否播放,按下音量键,调整的都是多媒体声音大小。
答案:将这段代码SelectorActivity.this.setVolumeControlStream(AudioManager.STREAM_MUSIC);添加到程序中。
2、问题:如何避免Toast多次弹出问题。有时,我们需要对用户的一些操作以Toast的形式给予反馈。举个例子,我们写一个简单的应用,界面上就包含一个按钮,按钮的事件给予Toast显示,显示的时间长短设置为Toast.LengthShort,当我们多次点击该按钮的时候,就会弹出多个Toast,并且每次的时间都是Toast.LengthShort,这样就会导致Toast长久出现在界面上。
答案:采用这种方式解决,Toast toast = new Toast();引起的原因是由于多次创建Toast对象,所以,将创建对象的代码放在按钮事件响应代码的外面,一般都是放在里面。比如:天天动听音乐播放器就解决了这个问题。
3、问题:当应用初次打开的时候,自动在桌面上生成应用的快捷方式。
答案:相关代码片段:
初次创建:onCraete()中调用
createShortCut();
SharedPreferences sharedP = this.getSharedPreferences("flag", Context.MODE_PRIVATE); Editor editor = sharedP.edit(); editor.putBoolean("first", false); editor.commit();
private void createShortCut() { SharedPreferences sharedP = this.getSharedPreferences("flag", Context.MODE_PRIVATE); if (sharedP.getBoolean("first", true)) { Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name)); // 是否可以有多个快捷方式的副本,参数如果是true就可以生成多个快捷方式,如果是false就不会重复添加 shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false); Intent intent2 = new Intent(Intent.ACTION_MAIN); intent2.addCategory(Intent.CATEGORY_LAUNCHER); // 要删除的应用程序的ComponentName,即应用程序包名+activity的名字 intent2.setComponent(new ComponentName(this.getPackageName(), this .getPackageName() + ".SelectorActivity")); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2); shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.icon)); sendBroadcast(shortcutIntent); } }
当然,相关的权限必须加上。
4、按两次返回键,再退出程序。
答案:
private static boolean isExit = false; private static boolean hasTask = false; private Timer tExit = new Timer(); private TimerTask task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub isExit = false; hasTask = true; } }; public boolean onKeyDown(int keycode, KeyEvent event) { if (keycode == KeyEvent.KEYCODE_BACK) { if (isExit == false) { isExit = true; Toast.makeText(this, "请再次摁下返回键推出程序", Toast.LENGTH_SHORT).show(); if(!hasTask) { tExit.schedule(task, 2000); } } else { this.finish(); System.exit(0); } } return false; }
5、有关全局变量的定义
在平常的Java开发过程中,全局变量的定义是来自一个单独的静态类,将所需的一些公用变量放入其中,在android中,有它独特的方式。
答案:创建一个继承与Application的类,将一些全局变量放入其中,注意在AndroidManifest.xml中的Application节点添加android:name=".MyApplication"属性。
6、循环加载文件名类似的图片代码:
7、android开发过程中的半角转换为全角的代码段:
public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c.length; i++) { if (c[i] == 12288) { c[i] = (char) 32; continue; } if (c[i] > 65280 && c[i] < 65375) c[i] = (char) (c[i] - 65248); } return new String(c); }
8、android字符串解码
public static String Decode(String str) { str = str.replace("<br/>", "\n"); str = str.replace("<br>", "\n"); str = str.replace(">", ">"); str = str.replace("<", "<"); str = str.replace(" ", " "); str = str.replace(""", "\""); str = str.replace("''", "'"); str = str.replace("&", "&"); return str; }