Android常用技巧以及代码片段整理

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、循环加载文件名类似的图片代码:

  1. for (int i = 0; i <4; i++)  
  2.         {  
  3.             int id = getResources().getIdentifier("a"+ i, "drawable", mContext.getPackageName());  

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;
	}


你可能感兴趣的:(游戏,android,timer,application,action,音乐)