音楽プレーヤー制作ログをからかう(一)


私はプログラミングが大好きで、1つのプロジェクトを见るのが好きで、最初の何行のコードからゆっくりといくつかのクラスになって、何千行のコード.振り返ってみると、これはすべて1つのアルファベットの1つの言叶で打ったのです.とても楽しいと感じます...
    残念ながら、授业が终わった后、私达になることができなくて、心の中はとても残念です...今覚えていることも多くなくて、これで放弃したくありません..そこで简単な地元の音楽プレーヤーを作ることを决めました...前にすでに书いて、ネット上で多くの资料を参考にしました.皆さん、多くの指导を望んで...今は3/1を完成したでしょう...私は半人前としか言えません.すばらしいコードは書けません..
    残念なことに、私は书く时にサービスを加入していないで、今フロントで放送するしかありません..后で改善することができることを望みます..
現在の実装機能:
1,MediaStoreツールを通じて携帯電話の中の全部の音楽のファイルを読み取って、そして1つのListViewの上で表示します;
2.GestureDetectorジェスチャーマネージャにより簡単なユーザジェスチャー操作を識別する.
    例えば:左右にスライドして、クリックして、長押しします.プレーヤーは異なる操作に対して異なるフィードバックをします;
3,SeekBarプログレスバーは音楽のプログレスを制御する(これは非常に簡単である);
4、実现:シングルサイクル、リストサイクル、ランダム再生、顺番再生、4种类の再生モード.
5,摇一摇ランダム换歌(抄微信摇一摇);
次に、MusicActivity.classのコードをいくつか示します.
1、4種類の再生モードの同じボタン:
//        
		@Override
		public void onClick(View v) {
			if (mediaUtils.isPlay()) {
				if (isLoop == false && isAllLoop == false && isShuff == false) { //     
					button.setBackgroundResource(R.drawable.mediap_cycleone);
					isLoop = true;
					isAllLoop = false;
					isShuff = false;
					mediaUtils.loopPlay(isLoop);
					showTag("    ");
					return;
				} else if (isAllLoop == false && isLoop == true
						&& isShuff == false) {//     
					button.setBackgroundResource(R.drawable.mediap_cycleall);
					isAllLoop = true;
					isLoop = false;
					isShuff = false;
					mediaUtils.loopPlay(isLoop);
					showTag("     ");
					return;
				} else if (isShuff == false) {
					button.setBackgroundResource(R.drawable.mediap_random);
					isShuff = true;
					mediaUtils.setShuff(isShuff);
					isLoop = false;
					isAllLoop = false;
					mediaUtils.loopPlay(isLoop);
					showTag("     ");
					return;
				} else {
					//     
					button.setBackgroundResource(R.drawable.mediap_order);
					isShuff = false;
					isLoop = false;
					isAllLoop = false;
					mediaUtils.loopPlay(isLoop);
					showTag("    ");
					return;
				}
			} else {
				showTag("      ~~");
			}
		}
		
               ,          ,        ..
          (isLoop,isAllLoop,isShuff),        background.        ,          .           .

次は揺れるコードを貼って、ネット上には多くのバージョンがあります.これは頼りになると思います.
public class MusicShake implements SensorEventListener {
	//       
	private SensorManager sensorManager = null;
	//    
	private Sensor sensor = null;
	//     
	private static final int SPEED_SHRESHOLD = 3000;
	//       
	private static final int UPTATE_INTERVAL_TIME = 70;
	//      
	private OnShakeListener onShakeListener;
	//   
	private Context mContext;
	//   (  ,  ,  )
	private float lastX;
	private float lastY;
	private float lastZ;
	//       
	private long lastUpdateTime;

	//         "  "      
	public MusicShake(Context context) {
		this.mContext = context;

		Start();

	}

	//       
	private void Start() {
		//        
		sensorManager = (SensorManager) mContext
				.getSystemService(Context.SENSOR_SERVICE);
		if (sensorManager != null) {
			//        
			sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

		}
		//         
		RegisterListener();

	}

	//   
	private void RegisterListener() {
		if (sensor != null) {
			//       .     Game  
			sensorManager.registerListener(this, sensor,
					SensorManager.SENSOR_DELAY_GAME);
		}

	}

	//     
	public void unRegisterListener() {
		sensorManager.unregisterListener(this);
	}

	//     
	public void setOnShakeListener(OnShakeListener onShakeListener) {
		this.onShakeListener = onShakeListener;

	}

	//      
	public interface OnShakeListener {
		//     
		void OnShake();
		// ~~~~~(     ,          );

	}

	@Override
	public void onAccuracyChanged(Sensor arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		//       
		long currentUpdateTime = System.currentTimeMillis();
		//       
		long timeInterval = currentUpdateTime - lastUpdateTime;
		if (timeInterval < UPTATE_INTERVAL_TIME)
			return;
		//          
		lastUpdateTime = currentUpdateTime;
		//          
		float x = event.values[0];
		float y = event.values[1];
		float z = event.values[2];
		//           
		float deltaX = x - lastX;
		float deltaY = x - lastY;
		float deltaZ = x - lastZ;
		//       
		lastX = x;
		lastY = y;
		lastZ = z;
		//     .
		double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
				* deltaZ)
				/ timeInterval * 10000;
				
		Log.v("theLog", "================" + speed + "================");
		//        ,       log,         ......
		//         ,        .
		if (speed >= SPEED_SHRESHOLD) {
			onShakeListener.OnShake();
		}
	}
        ,     ,           ,        ..

ソースは私が添付ファイルの中で贴って、自分で时间を割いて作ったので、BUGはどれだけあるか分かりません.みんなが喷かないことを望みます.
次の段階で実現する準備をしている点:
1、歌詞;
2,Service;
3,ネットワーク機能(資料が見つかったら);
差は多くないでしょう、これらは私にとってとても忙しいです.へへ.
最后に、みんなの仕事が顺调であることを望んで、私も1部の私达の仕事を探し当てることができることを祈ります.