編輯:關於Android編程
Activity與Service之間交互並播放歌曲,為了方便,我把要播放的歌曲定死了,大家可以靈活改進
MService:
復制代碼 代碼如下:
package com.tiantian.test;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.Environment;
import android.os.IBinder;
import android.util.Log;
public class MService extends Service{
MyBinder myBinder = new MyBinder();
private MediaPlayer mediaPlayer;
public class MyBinder extends Binder{
MService getService(){
return MService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.v("CAT", "onBind");
return myBinder;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.v("CAT", "onCreate");
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/mp3/trhxn.mp3");
mediaPlayer.prepare();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.v("CAT", "fail");
e.printStackTrace();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.v("CAT", "onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.v("CAT", "onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Log.v("CAT", "onUnbind");
return false;
}
public void start(){
mediaPlayer.start();
}
public void pause(){
mediaPlayer.pause();
}
public void stop(){
mediaPlayer.stop();
mediaPlayer.release();
}
public int getDuration(){
return mediaPlayer.getDuration();
}
public int getCurrentPosition(){
return mediaPlayer.getCurrentPosition();
}
public void seekTo(int position){
mediaPlayer.seekTo(position);
}
}
MusicPlayActivity:
復制代碼 代碼如下:
package com.tiantian.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
public class MusicPlayActivity extends Activity {
/** Called when the activity is first created. */
MService mService;
private ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
// TODO Auto-generated method stub
mService = ((MService.MyBinder)arg1).getService();
Log.v("CAT", "getServiced");
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mService = null;
}
};
private SeekBar seekBar;
private Button playBT;
private boolean isPlaying = false;
private boolean isBinded = false;
private Handler mHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(MusicPlayActivity.this, MService.class);
if(!isBinded){
bindService(intent, conn, BIND_AUTO_CREATE);
isBinded = true;
}
seekBar = (SeekBar) findViewById(R.id.seekBar);
playBT = (Button) findViewById(R.id.startBT);
mHandler = new Handler();
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
if(fromUser){
mService.seekTo((progress*mService.getDuration())/100);
}
}
});
playBT.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(!isPlaying){
mService.start();
isPlaying = true;
playBT.setText("暫停");
mHandler.post(seekBarThread);
}else{
mService.pause();
isPlaying = false;
playBT.setText("播放");
mHandler.removeCallbacks(seekBarThread);
}
}
});
}
Runnable seekBarThread = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
seekBar.setProgress((mService.getCurrentPosition()*100)/mService.getDuration());
mHandler.postDelayed(seekBarThread, 200);
}
};
}
今天我們開始進入講解android中的一些高級主題的用法,比如傳感器、GPS、NFC、語音和人臉識別等。這次來對傳感器的一個簡單介紹:Android平台支持三大類的傳感器
目前64bit android系統也慢慢的多了,看到也有apk聲稱支持64bit system,然後就往裡面打包搞了個arm64-v8a 目錄,放了個64bit的so,但
Cocos2d-x移植到Android平台編譯的兩個文件Android.mk和Application.mk2014年6月11日 本篇博客主要講NDK編譯Android項目
本文實例為大家分享了Android刮刮卡效果控件,供大家參考,具體內容如下刮刮卡類: package com.reyo.view;import android.conte