編輯:關於Android編程
public class MusicActivity extends Activity implements OnClickListener{ @Override public void onClick(View v) {connection(); } private void connection() { Intent intent = new Intent("david.bindService"); bindService(intent, sc, Context.BIND_AUTO_CREATE); } //在客戶端覆寫onServiceConnected方法,當服務綁定成功會調用此回調函數 private ServiceConnection sc = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { MyBinder binder = (MyBinder)service; //通過IBinder獲取Service musicService = binder.getService(); if(musicService != null){ musicService.play(); } } }; } }
Service
public class MusicService extends Service { //需用內部類繼承Binder,並定義方法獲取Service對象 private final IBinder binder = new MyBinder(); public class MyBinder extends Binder { BindMusicService getService() { return BindMusicService.this; } } @Override public IBinder onBind(Intent intent) {//當客戶端調用bindService()方法時調用此函數 return binder; } @Override public void onCreate() { } @Override public void onDestroy() { } }
應用范例 Activity文件
package com.app.myservice; import com.app.myservice.service.MyService; import com.app.myservice.service.MyService.MyBind; import android.os.Bundle; import android.os.IBinder; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class ServiceDemo03_Bind extends Activity implements OnClickListener{ private Button startservice,stopservice,binderservice,unbinderservice,getService; private boolean mIsBound; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); startservice = (Button) findViewById(R.id.button1); stopservice = (Button) findViewById(R.id.button2); binderservice = (Button) findViewById(R.id.button3); unbinderservice = (Button) findViewById(R.id.button4); getService = (Button) findViewById(R.id.button5); startservice.setOnClickListener(this); stopservice.setOnClickListener(this); binderservice.setOnClickListener(this); unbinderservice.setOnClickListener(this); getService.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(ServiceDemo03_Bind.this,MyService.class); switch (v.getId()) { case R.id.button1: startService(intent); break; case R.id.button2: stopService(intent); break; case R.id.button3: //綁定Service //BIND_AUTO_CREATE表示自動創建 bindService(intent, connection, BIND_AUTO_CREATE); mIsBound = true; break; case R.id.button4: //解除綁定Service if (mIsBound == true) { unbindService(connection); } mIsBound = false; break; case R.id.button5: //提示框 Toast.makeText(ServiceDemo03_Bind.this, "當前Service的值為"+mService.getIndex(), 1000).show(); break; default: break; } } private MyService mService = new MyService(); ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub Toast.makeText(ServiceDemo03_Bind.this, "這裡是:onServiceDisconnected", 1000).show(); } @Override public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub Toast.makeText(ServiceDemo03_Bind.this, "這裡是:onServiceConnected", 1000).show(); System.out.println("onServiceConnected"); MyService.MyBind myBind = (MyBind) service; mService = myBind.getMyService(); } }; }
Service文件
package com.app.myservice.service; import java.util.Timer; import java.util.TimerTask; import android.R.integer; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.Binder; import android.os.IBinder; import android.widget.Toast; public class MyService extends Service{ private Timer timer; private TimerTask task; private int index=0; Context context; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return mBind; } private MyBind mBind = new MyBind(); public class MyBind extends Binder { public MyService getMyService() { return MyService.this; } } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); context = getApplicationContext(); Toast.makeText(context, "這裡是:onCreate", 1000).show(); System.out.println("onCreate"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub System.out.println("onStartCommand"); Toast.makeText(context, "這裡是:onStartCommand", 1000).show(); startTimer(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub System.out.println("onDestroy"); Toast.makeText(context, "這裡是:onDestroy", 1000).show(); super.onDestroy(); stopTimer(); } public void startTimer() { timer = new Timer(); task = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub index++; System.out.println(index); } }; // 安排指定的任務從指定的延遲後開始進行重復的固定延遲執行 timer.schedule(task, 1000, 1000); } public void stopTimer() { timer.cancel();//取消此計時器任務 } public int getIndex() { return index; } }
XML布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".FirstActivity" android:background="#fff" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="38dp" android:layout_marginTop="14dp" android:text="開始service" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_below="@+id/button1" android:text="停止cervice" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" android:text="綁定service" /> <Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button3" android:layout_below="@+id/button3" android:text="解除綁定service" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button4" android:layout_below="@+id/button4" android:text="獲取service" /> </RelativeLayout>
一、什麼是相對布局相對布局是另外一種控件擺放的方式相對布局是通過指定當前控件與兄弟控件或者父控件之間的相對位置,從而達到相對的位置二、為什麼要使用相對布局相對於線性布局u
視差效果是什麼?所謂的視差效果在Web設計和移動應用中都非常常見,我們在一些主要的平台都可以發現它的身影,從Windows Phone到iOS乃至Android。按照維基
使用樣式文件,在values 目錄下新建styles.xml文件,編寫如下代碼: 復制代碼 代碼如下: Code highlighting produced by Act