您好,登錄后才能下訂單哦!
MainActivity:
public class MainActivity extends Activity { Mybinder mybinder =null; ServiceConnection mConn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder binder) { mybinder = (Mybinder) binder;//對象binder,強轉為Mybinder類型 Log.e("MainActivity", "mybinder.getname()"); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView textView1 = (TextView) findViewById(R.id.textView1); final TextView textView2 = (TextView) findViewById(R.id.textView2); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,MyService.class); bindService(intent, mConn, BIND_AUTO_CREATE); } }); findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { unbindService(mConn); } }); findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textView1.setText(mybinder.play());//通過mybinder調用service的方法,或者通過方法將數據傳給service } }); findViewById(R.id.button4).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { textView2.setText(mybinder.pause()); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
MyService:
public class MyService extends Service { public String play() { return "播放"; } public String pause() { return "暫停"; } class Mybinder extends Binder//Binder類繼承了接口IBinder,Mybinder繼承Binder類 { //在Mybinder創建方法 public String getname() { return "myBinder"; } //調用外部方法 public String play() { return MyService.this.play(); } public String pause() { return MyService.this.pause(); } } private IBinder binder = new Mybinder();//IBinder聲明創建一個Mybinder對象 @Override public IBinder onBind(Intent intent) { Log.e("MyService", "onBind"); return binder;//返回IBinder對象 } @Override public void onCreate() { Log.e("MyService", "onBind"); super.onCreate(); } @Override public boolean onUnbind(Intent intent) { Log.e("MyService", "onUnbind"); return super.onUnbind(intent); } @Override public void onDestroy() { Log.e("MyService", "onDestroy"); super.onDestroy(); } }
注:
service屬性
android:enabled
這個屬性用于指示該服務是否能夠被實例化。如果設置為true,則能夠被實例化,否則不能被實例化。默認值是true。
<application>元素有它自己的enabled屬性,它的這個屬性適用于應用中所有的組件,包括service組件。對于被啟用的服務,<application>和<service>元素的enabled屬性都必須是true(默認值都是true)。如果有一個元素的enabled屬性被設置為false,該服務就會被禁用,而不能被實例化。
android:exported
這個屬性用于指示該服務是否能夠被其他應用程序組件調用或跟它交互。如果設置為true,則能夠被調用或交互,否則不能。設置為false時,只有同一個應用程序的組件或帶有相同用戶ID的應用程序才能啟動或綁定該服務。
它的默認值依賴與該服務所包含的過濾器。沒有過濾器則意味著該服務只能通過指定明確的類名來調用,這樣就是說該服務只能在應用程序的內部使用(因為其他外部使用者不會知道該服務的類名),因此這種情況下,這個屬性的默認值是false。另一方面,如果至少包含了一個過濾器,則意味著該服務可以給外部的其他應用提供服務,因此默認值是true。
這個屬性不是限制把服務暴露給其他應用程序的唯一方法。還可以使用權限來限制能夠跟該服務交互的外部實體。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。