スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android Serviceの作成

Serviceとは
・Serviceとは4ダイ構成コウセイ要素ヨウソのひとつで、バックグランドで動作ドウサ可能カノウなアプリの基盤キバンとなります。
 ServiceはIntentをカイして開始カイシされる。
■バックグランド処理ショリ時間ジカン表示ヒョウジするアプリ
・マルチスレッド処理ショリウツツ時刻ジコク生成セイセイ結果ケッカをステータスバー、通知欄ツウチラン表示ヒョウジする。
□DatetimeNowアクティビティクラス
                         
  package android.datetime.now;  
   
  import android.app.Activity;  
  import android.content.Intent;  
  import android.os.Bundle;  
  import android.view.View;  
  import android.view.View.OnClickListener;  
  import android.widget.Button;  
   
  public class DatetimeNow extends Activity {  
  @Override  
  public void onCreate(Bundle savedInstanceState) {  
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main);  
   
  Button start = (Button) findViewById(R.id.start_btn);
  Button end = (Button) findViewById(R.id.stop_btn);  
  final Intent it = new Intent(this, DatetimeService.class);
  start.setOnClickListener(new OnClickListener() {  
  @Override  
  public void onClick(View v) {  
  startService(it);
  }  
  });  
  end.setOnClickListener(new OnClickListener() {  
  @Override  
  public void onClick(View v) {  
  stopService(it);
  }  
  });  
  }  
  }  
                         
①スタート、ストップボタンに抽出チュウシュツ、イベントを追加ツイカする
②Serviceを実装ジッソウしたDatetimeServiceクラスをIntentで生成セイセイする
③IntentをカイしてServiceを開始カイシする
④stopServiceでServiceを停止テイシする
□DatetimeServiceクラス
                                       
  package android.datetime.now;  
   
  import java.util.Calendar;  
  import java.util.Date;  
  import java.util.TimeZone;  
   
  import android.app.Notification;  
  import android.app.NotificationManager;  
  import android.app.PendingIntent;  
  import android.app.Service;  
  import android.content.Intent;  
  import android.os.Handler;  
  import android.os.IBinder;  
  import android.os.Message;  
  import android.util.Log;  
   
  public class DatetimeService extends Service {  
  private static final int ID = 0; // Notificationの識別子  
  private static final int UPDATE = 1; // Handlerの識別子  
  private NotificationManager mNotifMan; // ステータスバー  
  private long mInterval = 1000; // =10秒  
  private boolean mRunning = false;  
   
  @Override  
  public void onCreate() {  
  super.onCreate();  
  Log.d("Datetime", "onCreate");  
  mRunning = true;  
  // getSystemServiceはシステムレベルのサービスのハンドルを返す  
  // ステータスバー通知オブジェ抽出  
  mNotifMan = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);   
  }  
   
  @Override  
  public void onStart(Intent it, int id) {  
  super.onStart(it, id);  
  Log.d("Datetime", "onStart");  
  if (!mHandler.hasMessages(UPDATE))  
  startCountDown();  
  }  
   
  @Override  
  public void onDestroy() {  
  super.onDestroy();  
  Log.d("Datetime", "onDestroy");  
  mNotifMan.cancel(ID);  
  mHandler.removeMessages(UPDATE);  
  mRunning = false;  
  }  
   
  // マルチスレッド化に必要  
  private Handler mHandler = new Handler() {  
  public void handleMessage(Message msg) { // HandlerのhandleMessageをオーバーライド  
  Log.d("Datetime", "handleMessage");  
  // 現在の時刻を渡す  
  showNotification(new Date().toString());  
  // 再帰的にhandleMessageメソッドを呼出す  
  if (mRunning)  
  mHandler.sendEmptyMessageDelayed(UPDATE, mInterval); // 一定期間ごとに処理を実行
  }  
  };  
   
  private void startCountDown() {  
  Log.d("Datetime", "startCountDown");  
  mHandler.sendEmptyMessage(UPDATE); // sendEmptyMessageはhandleMessageメソッドを呼び出す
  }  
   
  private void showNotification(String lastSec) {  
  Log.d("Datetime", "showNotification");  
  // 1.アイコン 2.表示文字列 3.通知時間  
  Notification notif = new Notification(R.drawable.icon, lastSec, 0); // 通知情報  
  // DatetimeNow Activityクラスを設定  
  Intent it = new Intent(this, DatetimeNow.class);  
  // Activityをペンディングする  
  PendingIntent pit = PendingIntent.getActivity(this, 0, it, 0);  
  // 通知領域の表示の設定  
  // 1.Context 2.アプリ名 3.説明文 4.実行PendingIntent  
  notif.setLatestEventInfo(this, "現在時刻", lastSec, pit);  
  mNotifMan.notify(ID, notif);// 通知  
  }  
   
  @Override  
  public IBinder onBind(Intent intent) {  
  Log.d("Datetime", "onBind");  
  // TODO Auto-generated method stub  
  return null;  
  }  
  }  
                                       
①getSystemServiceでNotificationManagerオブジェを取得シュトク
②ServiceのonStartメソッドにより開始カイシされる。startCountDownメソッドにてHandlerを実行ジッコウ
③バックグランド処理ショリHandlerを生成セイセイし、handleMessageをオーバーライドする
④Handlerナイ通知ツウチするメソッドを、出力シュツリョクする文字列モジレツ引数ヒキスウにしてす。
一定イッテイ時間ジカンにhandleMessageメソッドをCallする
⑥sendEmptyMessageにより、HandlerのhandleMessageメソッドを実行ジッコウする
⑦Notificationオブジェ(ステータスバー)を生成セイセイ
⑧Intentを利用リヨウすActivityを設定セッテイする
⑨PendingIntentにてActivityをペンディングする
⑩notif.setLatestEventInfoにて「通知ツウチラン」への出力シュツリョクオコナう。クリックにPendingにて設定セッテイしたIntentをCallする
実行ジッコウイメージ
ウエのステータスバーに指定シテイしたアイコンとウツツ時刻ジコク表示ヒョウジされる
通知ツウチへnotif.setLatestEventInfoへ指定シテイした内容ナイヨウ表示ヒョウジ。クリックすることでActivityを起動キドウ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
スポンサーサイト

テーマ : android
ジャンル : コンピュータ

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。