2018-2019-2 20140203モバイルプラットフォーム応用開発実践第12週学習まとめ

8687 ワード

47,48,49,50章
第47章サービス
ServiceはAndroidの4つのコンポーネントで、Android dManifest.xmlで声明し、Android dManifest.xmlでは、Package ManagerServiceがこのServiceを解析し、対応するデータ構造を確立するためであると宣言しています.Serviceは以下の3種類に分けられます.
  • forevground service fg Serviceは、audioアプリケーションがfg serviceを使用して曲を再生するように、ユーザにとって感知可能な動作の一部を実行する.
  • background service bg serviceで実行される操作は、ユーザにとって感知できないものである.
  • bound service bound serviceは主にc/sインターフェースを提供し、コンポーネントとserviceとの通信を可能にします.
  • つまり、起動方式によって三つのサービスが発生しました.startService->background service.startForeground Service->foreground service->bound service
    第48章放送受信機
    ブロードキャスト受信機は、他のアプリケーションまたはシステムからのブロードキャストメッセージに応答するために使用される.これらのメッセージは、時にはイベントまたは意図と呼ばれることがある.例えば、アプリケーションは、ブロードキャストを初期化して、他のアプリケーションにいくつかのデータがデバイスにダウンロードされたことを知らせ、彼らのために使用されてもよい.このようにブロードキャスト受信機は、これらの通信をブロックする適切な動作を定義することができる.次の2つの重要なステップは、システムのブロードキャスト意図をブロードキャスト受信機と連携させる.
  • は、ブロードキャスト受信機
  • を作成する.
  • にブロードキャスト受信機を登録するには、さらに追加のステップがあります.カスタマイズの意図を実現するには、これらの意図を作成し、ブロードキャストしなければなりません.
  • 放送受信機ブロードキャスト受信機を作成するには、BroadcastReceiverクラスのサブクラスとして実現し、Intentオブジェクトをパラメータとするメッセージを受信するために、オン・Receive()方法を書き換える必要がある.
  • public class MyReceiver extends BroadcastReceiver {
       @Override
       public void onReceive(Context context, Intent intent) {
          Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
       }
    }
  • は、ブロードキャスト受信機アプリケーションを登録し、Android Manifest.xmlにブロードキャスト受信機を登録することによって作成された放送意図を傍受する.もし私たちがMyReceiverを登録してシステムの発生を監督するACT ION_BOOT_COMPLETEDイベント.このイベントはAndroidシステムの起動プロセスが完了した時に発生します.
  • 
       
    
          
             
             
          
    
       
    
    今は、Androidデバイスがいつ起動されても、ブロードキャスト受信機MyReceiverによってブロックされ、onReceive()で実現されるロジックが実行されます.多くのシステムによって生成されるイベントはクラスIntentにおける静的定数値として定義される.次は重要なシステムイベントです.android.intent.actions.BATTERY_CHANGEDの持続的な放送には、バッテリーの充電状態、レベル、その他の情報が含まれています.android.intent.actions.BATTERY_LOWはデバイスの低電力条件を識別する.android.intent.actions.BATTERY_OKAYマーク電池は電気量が少なくなってから、もう大丈夫です.android.intent.actions.BOOT_COMPLETEDはシステムが起動したら放送します.android.intent.action.BUG_REPORTはバグを報告する活動を表示します.android.intent.action.CALLがコールデータの指定を実行するある人.android.intent.action.CALL_BUTONユーザは「呼び出し」ボタンをクリックしてダイヤルまたは他のダイヤルの適切な画面を開きます.android.intent.action.DATE_CHANGED日付が変更されました.android.intent.actions.REBOOT設備を再起動します.
  • 放送のカスタム意図は、アプリケーションでユーザー定義の意図を生成して送信する場合、アクティビティクラスでsendBroadcast()を介して作成して送信する必要があります.sendStickyBroadcastを使用すれば、意図は永続的であり、これは放送が完了した後もずっと保持しているという意味です.
  • public void broadcastIntent(View view)
    {
       Intent intent = new Intent();
       intent.setAction("cn.uprogrammer.CUSTOM_INTENT");
       sendBroadcast(intent);
    }
    cn.uprogrammer.CUSTOM_INTENT                        。
    
       
    
          
             
             
          
    
       
    
    第49章アラームサービス
    AlarmManagerという類はシステムアラームサービスへのアクセスインターフェースを提供します.あなたのアプリケーションのために、未来のある時間に目覚める機能を設定してもいいです.目覚まし時計が鳴ったら、実はシステムがこの目覚まし時計のために登録した放送を出しました.自動的にターゲットアプリケーションを起動します.登録された目覚まし時計は設備が眠る時も保留されています.設備を起動するかどうかを選択的に設定できますが、電源を切って、再起動したら、アラームはクリアされます.Android Api demosには目覚まし時計についてのデモがあります.comp.example.android.apis.app.AlarmControllerには二つの目覚まし時計が設定されています.一つは使い捨てで、もう一つは重複しています.
  • 使い捨て目覚まし時計
  •             // When the alarm goes off, we want to broadcast an Intent to our
                // BroadcastReceiver. Here we make an Intent with an explicit class
                // name to have our own receiver (which has been published in
                // AndroidManifest.xml) instantiated and called, and then create an
                // IntentSender to have the intent executed as a broadcast.
                Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
                PendingIntent sender = PendingIntent.getBroadcast(
                        AlarmController.this, 0, intent, 0);
    
                // We want the alarm to go off 10 seconds from now.
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);
    
                // Schedule the alarm!
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
  • 繰り返しアラーム
  • アラームの設定:
                // When the alarm goes off, we want to broadcast an Intent to our
                // BroadcastReceiver. Here we make an Intent with an explicit class
                // name to have our own receiver (which has been published in
                // AndroidManifest.xml) instantiated and called, and then create an
                // IntentSender to have the intent executed as a broadcast.
                // Note that unlike above, this IntentSender is configured to
                // allow itself to be sent multiple times.
                Intent intent = new Intent(AlarmController.this,
                        RepeatingAlarm.class);
                PendingIntent sender = PendingIntent.getBroadcast(
                        AlarmController.this, 0, intent, 0);
    
                // We want the alarm to go off 10 seconds from now.
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 10);
                // Schedule the alarm!
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.setRepeating(AlarmManager.RTC_WAKEUP,
                        calendar.getTimeInMillis(), 10 * 1000, sender);
    アラームキャンセル:
                // Create the same intent, and thus a matching IntentSender, for
                // the one that was scheduled.
                Intent intent = new Intent(AlarmController.this,
                        RepeatingAlarm.class);
                PendingIntent sender = PendingIntent.getBroadcast(
                        AlarmController.this, 0, intent, 0);
    
                // And cancel the alarm.
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                am.cancel(sender);
    第50章コンテンツプロバイダ
    コンテンツプロバイダは、アプリケーション間でデータを共有するインターフェースです.アプリケーションが作成したデータベースは、デフォルトではプライベートです.他のアプリケーションはデータにアクセスできません.データを外部に提供するためには、コンテンツ提供が必要です.ContentProviderはデータストアの詳細を遮断し、内部実装はユーザーに対して完全に透明であり、ユーザーはデータを操作することに関心があるuriだけでいいです.ContentProviderは異なるアプリ間で共有できます.Sqlにも添削調査の方法がありますが、sqlは本アプリケーションのデータベースを調べるしかありません.ContectProviderは、ローカルファイル/xmlファイルの読み込みなどを削除して調べることもできます.Androidシステムは、連絡先(通信録アプリケーション)Providerが異なるアプリケーションのために連絡先データを提供するような、当事者の側面にこのようなメカニズムを適用する.ショートメッセージ(ショートメールアプリ)Providerは、システムショートメッセージの情報を提供します.ContentProviderクラスを継承し、データの提供やデータの保存方法を書き換えることで、他のアプリケーションにデータを共有することができます.他の方法を使っても、対外的にデータを共有できますが、データの保存方式によって、例えばファイル方式でデータを共有し、ファイル操作でデータを読み書きする必要があります.SharedPreferencesでデータを共有するには、SharedPreferences APIを使用してデータを読み書きする必要があります.ContentProviderを使ってデータを共有するメリットは、データアクセス方式を統一することです.つまり、コンテンツプロバイダは構造化データに対して最も一般的なアクセスを管理しており、操作内容提供者は異なるプロセス間でデータベースデータ形式でデータをインタラクションする標準方式である.カスタムコンテンツプロバイダは、コンテンツ提供者と訪問者の2つの部分を含む.内容提供者は、自分のデータベースを持って、データベースを暴露して訪問者の修正に供する.ContenProviderの編纂基本手順:1.ContentProviderを書く;2.データベース操作の空実現を含む一連の方法を書き換える.3.コンテンツプロバイダコードの内部にUriMatchを定義する-uriが合っているかどうかを判断するために使用する
    static UriMatcher mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    static {
       mUriMatcher.addURI("          authorities", "        ",        ); 
    }
  • 添削調査実行時にuriが適法かどうかを判断し、コンテンツプロバイダ内部でデータベースの添削を実現する.
  • リストファイルの次のステートメントproviderは、ホスト名を指定する必要があります.すなわち、外部から提供されるUriは、訪問者がコンテンツ解析者の中から同じuriに入ってきたときに、データベースにアクセスできます.
  •  
     
    訪問者は、別のプロジェクトに存在し、提供者のデータベースを操作することができます.
  • コンテンツ・プロバイダの解像度解析器ContentResover rever=文脈.get ContentResoliver()を作成します.
  • アクセスするUriパスUri=Uri.parseを定義する(「content:/カスタムホスト名/カスタムマッチング文字列」)/「content:/」は、標準的な書き方である
  • コンテンツプロバイダ解像器を利用して、削除・修正を行い、データベースの操作を実現する.
    コンテンツプロバイダUriの書き込みテンプレート:content://ホスト名authority/path/id.具体的な書き方は以下の通りです.
  • 「content:/」は、これらのデータを制御するContentProviderを説明するための固定的な書き方です.
  • ホスト名またはライセンスAuthorty:どのContentProviderがこれらのデータを提供するかを定義しています.
  • パス、URIのいずれかのItem.
  • ID:Uriを通常定義する場合は、「菗」のプレースホルダを使って代用し、使用時に対応する数字に置き換えます.データIDを表し、菗は任意の数字を表し、*は任意のテキストにマッチするために使用される
  • .