vivion26 发表于 2015-4-18 07:37:54

Android & Docker源代码

  
  
  Android App的源代码
   ee                                                    ee
  // myActivity.java
  package com.misoo.pk01;
  import android.app.Activity;
  import android.content.BroadcastReceiver;
  import android.content.ComponentName;
  import android.content.Context;
  import android.content.Intent;
  import android.content.IntentFilter;
  import android.content.ServiceConnection;
  import android.os.Bundle;
  import android.os.IBinder;
  import android.os.Parcel;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.widget.Button;
  import android.widget.LinearLayout;
  import android.widget.TextView;
  ee                                                    ee
  public class myActivity extends Activity implements OnClickListener {
        private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
        private final int FP = LinearLayout.LayoutParams.FILL_PARENT;
        private Button btn, btn2, btn3;
        public TextView tv;
        private IBinder ib = null;
        private final String MY_S_EVENT =
           new String("com.misoo.pk01.myService.MY_S_EVENT");
        protected final IntentFilter filter=new IntentFilter(MY_S_EVENT);
        private BroadcastReceiver receiver=new myIntentReceiver();
  
        public void onCreate(Bundle icicle) {
                  super.onCreate(icicle);
        
                  LinearLayout layout = new LinearLayout(this);
                  layout.setOrientation(LinearLayout.VERTICAL);
  
      btn = new Button(this);
                  btn.setId(101);
                  btn.setText("play");
                  btn.setBackgroundResource(R.drawable.heart);
                  btn.setOnClickListener(this);
                  LinearLayout.LayoutParams param =
  new LinearLayout.LayoutParams(80, 50);
                  param.topMargin = 10;
                  layout.addView(btn, param);
  
                  btn2 = new Button(this);
                  btn2.setId(102);
                  btn2.setText("stop");
                  btn2.setBackgroundResource(R.drawable.heart);
                  btn2.setOnClickListener(this);
                  layout.addView(btn2, param);
  
  btn3 = new Button(this);
                  btn3.setId(103);
                  btn3.setText("exit");
                  btn3.setBackgroundResource(R.drawable.cloud);
                  btn3.setOnClickListener(this);
                  layout.addView(btn3, param);
  
                  tv = new TextView(this);
                  tv.setText("Ready");
                  LinearLayout.LayoutParams param2 = new
  LinearLayout.LayoutParams(FP, WC);
                  param2.topMargin = 10;
                  layout.addView(tv, param2);
                  setContentView(layout);
        //---------------------------------
              registerReceiver(receiver, filter);
                 //------------------------------------------------------
  bindService(new Intent("com.misoo.pk01.REMOTE_SERVICE"),
  mConnection, Context.BIND_AUTO_CREATE);
  }
  private ServiceConnection mConnection = new ServiceConnection() {
  @Override
  public void onServiceConnected(ComponentName className, IBinder
  ibinder) {
  ib = ibinder;
  }
  @Override
  public void onServiceDisconnected(ComponentName name) {
  // TODO Auto-generated method stub
  
  }
  };
   public void onClick(View v) {
                  switch (v.getId()) {
                  case 101:
                          Parcel data = Parcel.obtain();
                          Parcel reply = Parcel.obtain();
                          try {
                                ib.transact(1, data, reply, 0);
                          } catch (Exception e) {
                                e.printStackTrace();
                          }
                          break;
                  case 102:
  data = Parcel.obtain();
                          reply = Parcel.obtain();
                          try {
                                          ib.transact(2, data, reply, 0);
                                } catch (Exception e) {
                                          e.printStackTrace();
                                }
                          break;
                  case 103:
                          finish();
                          break;
                  }
        }
      //----------------------------------------------------
  class myIntentReceiver extends BroadcastReceiver {
                  @Override
                  public void onReceive(Context context, Intent intent) {
                          int bn = intent.getIntExtra("key",-1);
                          if(bn == 0)
                              tv.setText("Playing");
                          else
                                tv.setText("Stop.");
                  }
        }
  }
  ee                                                    ee
  // myService.java
  package com.misoo.pk01;
  import android.app.Service;
  import android.content.Context;
  import android.content.Intent;
  import android.media.MediaPlayer;
  import android.os.*;
  import android.util.Log;
  ee                                                         ee
  public class myService extends Service implements Runnable {
        private IBinder mBinder = null;
        private Thread th1;
        public static Handler h;
        private MediaPlayer mPlayer = null;
        public static Context ctx;
        private final String MY_S_EVENT =
               new String("com.misoo.pk01.myService.MY_S_EVENT");
  
        @Override
        public void onCreate() {
                  super.onCreate();
                 ctx = this;
                 mBinder = new myBinder();
                 //---------------------------------
      // 诞生一个子线程及其MQ
                 // 等待Message
                 //---------------------------------
                 th1 = new Thread(this);
                  th1.start();
      }
        @Override
        public IBinder onBind(Intent intent) {
                  return mBinder;
        }
        
        public void run() {
               Looper.prepare();
                  h = new EventHandler(Looper.myLooper());
           Looper.loop();
  }
  //---------------------------------------
        class EventHandler extends Handler {
        public EventHandler(Looper looper) {
                           super(looper);
        }
        public void handleMessage(Message msg) {
                 String obj = (String)msg.obj;
                 if(obj.contains("play"))
                    {
                           if(mPlayer != null) return;
                          //----------------------------------
                                 Intent in = new Intent(MY_S_EVENT);
                                 in.putExtra("key", 0);
                                 ctx.sendBroadcast(in);      
                             //----------------------------------
                           mPlayer = MediaPlayer.create(ctx, R.raw.dreamed);
  try {
                                          mPlayer.start();
                           } catch (Exception e) {
                                          Log.e("Play", "error: " + e.getMessage(), e);
                                }
                       
                 }
                 else if(obj.contains("stop")) {
                           if (mPlayer != null) {
                                //----------------------------------
                                    Intent in = new Intent(MY_S_EVENT);
                                    in.putExtra("key", 1);
                                    ctx.sendBroadcast(in);      
                                //----------------------------------
                              mPlayer.stop();
                                   mPlayer.release();
                                mPlayer = null;
                           }
                 }
      }}}
   ee                                                    ee
  // myBinder.java
  package com.misoo.pk01;
  import android.os.Binder;
  import android.os.Message;
  import android.os.Parcel;
  
  public class myBinder extends Binder{
        @Override
        public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
              throws android.os.RemoteException {
                    switch(code){
                          case 1:
                                // 将Message丢到子线程的MQ to draw Graphic
                                String obj = "play";
                                Message msg = myService.h.obtainMessage(1,1,1,obj);
                       myService.h.sendMessage(msg);
   break;
                          case 2:
                                // 将Message丢到子线程的MQ to stop drawing
                                obj = "stop";
                                msg = myService.h.obtainMessage(1,1,1,obj);
                       myService.h.sendMessage(msg);
   break;
                       }
                       return true;
        }}
  // ----------- END --------------------------------------------------------------
  
页: [1]
查看完整版本: Android & Docker源代码