(57)【特許請求の範囲】
【請求項１】
つぎの事項（１）（２）（３）により特定されるコンピューティングの方法。
（１）アンドロイド端末にインストールした特定アプリにより getRunningAppProcesses メソッドを所定間隔で繰り返しコールし、アンドロイドＯＳから各コール時点の起動中アプリプロセス情報を取得すること
（２）１回のコールにより取得した起動中アプリプロセス情報の中に以下の条件１〜条件４のすべてに該当するプロセス情報があるか否かを判断し、ある場合にはそのプロセス情報に該当するアプリ識別子を当該コール時点での起動中アプリ候補として抽出すること
《条件１》「重要度」の項目が「フォアグランド」であること
《条件２》「重要度の理由」の項目が「不明」であること
《条件３》「当該プロセスで実行中のアプリの識別子一覧」の項目に含まれるアプリ識別子が１つであること
《条件４》「プロセス名」項目が「当該プロセスで実行中のアプリの識別子一覧」の項目に１つだけ記述されているアプリ識別子と同名であること
（３）所定時間を超えて継続して起動中アプリ候補として抽出されたアプリ識別子を起動アプリ時系列情報に取り込むこと
【請求項２】
前記特定アプリをインストールした複数のアンドロイド端末と、これらアンドロイド端末と個別に通信するインターネット上のサーバーとにより請求項１に記載のコンピューティングの方法を分散処理により実施し、前記サーバーにおいて、各アンドロイド端末の識別情報と、各アンドロイド端末から得た情報に基づく前記起動アプリ時系列情報とを対応づけして集約する方法。
【請求項３】
請求項２に記載の方法を実施するようにプログラムされたサーバー。
【請求項４】
請求項２に記載の方法を実施するようにアンドロイド端末にインストールされる特定アプリ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、グーグル社が提供するアンドロイド（登録商標）と称するプラットフォームを利用した携帯電話機・タブレットコンピューター・テレビ受信機などの情報端末（以下、アンドロイド端末とする）に関し、とくに、アンドロイド端末において利用者が各種アプリケーションプログラムを逐次に起動する時系列の情報を調査するコンピューティング技術に関する。
【背景技術】
【０００２】
アンドロイド端末向けの多種多様なアプリケーションプログラム（以下、アンドロイドアプリあるいは単にアプリと略記する）がすでに数多く存在しており、これからも多くのアプリが開発されて利用可能となるであろう。アンドロイド端末の利用者は関心のあるいくつものアプリを自分の端末にインストールしておき、随時に必要なアプリを起動して活用している。
【０００３】
情報通信分野でビジネス活動をするものにとって、膨大な数のアンドロイド端末ユーザーがどのようなアプリに関心を示してどのように活用しているのかという情報は、たとえばテレビ放送業界における視聴率情報と同様に、きわめて有用なマーケティング情報となり得るものと認識され、そうした整理された情報（ビッグデータ）に対する需要はきわめて大きい。
【０００４】
特許第３３１７７０５号「コンピュータ使用メーターおよび解析装置」の発明では、一般ユーザーのパソコンにバックグランドで動作する情報採取プログラムを組み込み、この情報採取プログラムにより当該パソコンのユーザーによる利用状況を表す時系列データを記録する構成とし、多数のパソコンでそれぞれ記録された利用状況データを通信網を介して中央処理ステーションに収集している。収集した各パソコンの利用状況データをデータベース管理システムにより整理することで有意義な情報を得ることができる。各パソコンで記録する利用状況データの中には、パソコンで実行されたアプリケーションプログラムの開始・終了を記録したデータが含まれる。
【０００５】
出願人は、出願人が提供する情報採取プログラムを内蔵した特定アプリをユーザーのアンドロイド端末にインストールしてもらい、アンドロイド端末ユーザーに許諾を受けた上でその特定アプリ内で情報採取プログラムがバックグランドで働くことによりアンドロイドＯＳから所定の情報を取得し、アンドロイド端末でユーザーが起動したアプリの時系列情報をインターネット上のサーバーに収集するという業務を行っている。
【０００６】
この業務を行うために、これまでは、上記の情報採取プログラムからアンドロイドＯＳの getRecentTasksと名付けられたＡＰＩを逐次コールし、これに応えてアンドロイドＯＳから通知されるタスク情報のリストに基づいて、ユーザーが起動したアプリの時系列情報を過不足なく検知するように仕組んでいた。このコンピューティングの方法については、特開２０１３−７０３５３号公報の段落００２１〜００２６および段落００３８〜００５７に詳細に開示されているところ、この方法を従前方法と呼ぶことにする。
【発明の開示】
【０００７】
＝＝＝ getRecentTasks が廃止された＝＝＝
アンドロイドＯＳのバージョン５.０では、上述した getRecentTasksというＡＰＩ機能が廃止されたので、アンドロイドＯＳ最新版を搭載したアンドロイド端末を対象としては、上述した従前方法によりユーザー起動アプリ時系列情報を取得できなくなった。そのため、アンドロイドＯＳ最新版にも対応できる新たな別の方法をあみだす必要に迫られた。
【０００８】
＝＝＝ getRunningAppProcesses に着目＝＝＝
この出願の発明者は、バージョン５.０およびそれ未満のバージョンのアンドロイドＯＳにおいて利用可能な getRunningAppProcessesと称するＡＰＩ機能に着目し、これを以下のように利用することにより、アンドロイド端末でユーザーが起動したアプリの時系列情報をほぼ過不足なく捕捉できるようにしたコンピューティングの仕組みを創作した。
【０００９】
＝＝＝ getRunningAppProcesses で取得できる情報＝＝＝
情報採取プログラムからアンドロイドＯＳの getRunningAppProcesses をコールすると、アンドロイドＯＳは起動中のアプリのプロセス情報をすべて通知してくる。１つの起動中アプリプロセス情報は、以下の５項目の情報を少なくとも含んだ情報集合である（その集合には下記の項目１〜５の情報以外の他の情報が含まれているが、この発明には無関係なので省略している）。
《項目１》プロセスＩＤ
《項目２》プロセス名
《項目３》重要度
《項目４》重要度の理由
《項目５》当該プロセスで実行中のアプリの識別子一覧
【００１０】
アンドロイド端末の通常使用状態で複数のプロセスが起動されていることは普通に生じることなので、getRunningAppProcessesメソッドを１回実行することで情報採取プログラムに複数のプロセスに関する複数のプロセス情報（それぞれが上記５項目の情報を含んでいる）が通知されてくることが普通に生じる。
【００１１】
この発明に係るコンピューティングでは、新たに創作した情報採取プログラムを含んだ特定アプリを従前方法と同様にアンドロイド端末にインストールしてもらう。そして、この情報採取プログラムがアンドロイド端末上でバックグランドで動作し、以下に詳述する所定の間隔で getRunningAppProcessesを繰り返しコールし、各コールごとに取得する起動中アプリプロセス情報を解析することで、アンドロイド端末でユーザーが起動したアプリの時系列情報を検知するものである。
【００１２】
＝＝＝目的とする起動アプリ時系列情報とは＝＝＝
この発明が目的としていることは、テレビ番組の視聴率調査と同様な意味を持つマーケティング情報として、多数のアンドロイド端末ユーザーがどのようなアプリを日々利用しているのかを調査するために、各アンドロイド端末でユーザーが意図して起動したアプリの時系列情報を検知することである。
【００１３】
従前方法によれば getRecentTasksメソッドにより取得できる情報から目的とする起動アプリ時系列情報がほとんど直接的に検知できるといえる。
しかしながら、getRunningAppProcessesメソッドを利用するこの発明においては、アンドロイドＯＳから取得する起動中アプリプロセス情報を以下のように深読みしないと、目的とする起動アプリ時系列情報を検知することができない。
【００１４】
つまり、getRunningAppProcessesメソッドにより取得できる起動中アプリプロセス情報には目的とする起動アプリのプロセス情報がもれなく含まれているが、ユーザーが意図することなくＯＳやアプリの都合等で実行されているプロセス情報も含まれることが普通に発生する。そのような目的外のプロセス情報に幻惑されない深読み方法でないと、目的とする起動アプリ時系列情報を検知することができない。その深読みの仕方が、この発明の核心をなすコンピューティング・アルゴリズムであるといえる。
【００１５】
＝＝＝起動中アプリの候補を抽出するアルゴリズム＝＝＝
すでに説明したように、この発明の一実施例においては、アンドロイド端末にインストールされている特定アプリの情報採取プログラムがバックグランドで動作し、アンドロイドＯＳに対して getRunningAppProcessesを所定間隔で繰り返しコールし、各回のコールに対してアンドロイドＯＳから通知される起動中アプリプロセス情報を一時記憶し、つぎのアルゴリズムで分析する。
【００１６】
ある１回の getRunningAppProcessesメソッドの実行により、複数の起動中アプリプロセス情報をアンドロイドＯＳから受信したとする。情報採取プログラムは、受信した複数のプロセス情報のうち、つぎの条件１〜条件４のすべてに該当するプロセス情報があるか否かを分析する。
【００１７】
《条件１》項目３「重要度」が「フォアグランド」であること
《条件２》項目４「重要度の理由」が「不明」であること
《条件３》項目５「当該プロセスで実行中のアプリの識別子一覧」に含まれるアプリ識別子が１つであること
《条件４》項目２「プロセス名」が項目５「当該プロセスで実行中のアプリの識別子一覧」として１つだけ記述されているアプリ識別子と同名であること
【００１８】
アンドロイド端末において、あるアプリが起動されると、そのアプリを実行しているプロセスに係る起動中アプリプロセス情報が条件１および条件２に該当するものとなる。しかし、起動したアプリを実行しているプロセス以外（目的外プロセスとする）でも条件１および条件２に該当する起動中アプリプロセス情報が通知されることがある。そこで、基本的にアプリが実行されるプロセスはそのアプリ専用のものになることに着目し、条件１と条件２に該当しても、条件３に該当しないものは目的外プロセスと判断する。
【００１９】
さらに、一般的なアプリが実行されるプロセスの「プロセス名」はそのアプリの識別子と同名になるので、上記メソッドにより取得した起動中アプリプロセス情報の中に条件１〜条件４のすべてに該当するプロセス情報がある場合、そのプロセス情報に記述されているプロセス名（アプリ識別子）を getRunningAppProcessesコール時点での起動中アプリ候補として抽出して記録する。
【００２０】
＝＝＝起動中アプリ候補から目的外情報を除くアルゴリズム＝＝＝
ここで「候補」とした理由について説明する。アンドロイド端末においては、ユーザーが自覚的にアプリを起動しなくても、何らかの事情によりそのアプリが起動されて何らかのバックグランド処理が実行されてすぐに終了するという事象がしばしば発生する。たとえば、ある種のアプリをインストールした際、そのことを検知したＯＳが当該アプリを起動して何らかの処理をバックグランドで実行するような場合である。また、アプリに対するプッシュ通知を受信した場合にも同様な事象が発生する。その他にも、アンドロイドＯＳでは端末内部での種々の事象を検知してアプリに通知する仕組みがあるところ、そうした通知を受けとるようにプログラムされているアプリの場合、上記と同様に、ユーザーの意図とは無関係にアプリが短時間起動されるという事象が発生する。
【００２１】
上記のような事象が発生している最中にgetRunningAppProcessesがコールされた場合、このメソッド実行により取得する情報中に条件１〜条件４のすべてに該当するプロセス情報が含まれることになり、そのプロセス情報に対応するアプリが起動中アプリ候補として抽出される。このような成り立ちの起動中アプリ候補は、目的外情報であるとして除く方が適切である。その理由は「目的とする起動アプリ時系列情報とは」の項で説明したとおりであり、ユーザーが自覚的に起動して利用したアプリとはいえないからである。
【００２２】
この発明においては、 getRunningAppProcessesを繰り返しコールしてその都度取得する起動中アプリプロセス情報に基づいて各コール時点で起動中アプリ候補を抽出するところ、適宜に設定された基準時間を超えて継続して起動中アプリ候補として抽出されたアプリ識別子を「目的とする起動アプリ時系列情報」に取り込み、そのような継続性がなかった起動中アプリ候補は目的外情報として排除することとした。
【００２３】
具体的な実施例としてはつぎのように設定した。情報採取プログラムにより５秒間隔で繰り返し getRunningAppProcessesをコールし、２回続けて起動中アプリ候補として抽出されたアプリ識別子を起動アプリ時系列情報中に取り込み、１回だけしか起動中アプリ候補にならなかったアプリ識別子は起動アプリ時系列情報には取り込まないというアルゴリズムを採用した。
【００２４】
たとえば５秒間隔の各時点でつぎのように起動中アプリ候補が抽出されたとする。なお下記においてA、B、C、…はアプリ識別子を表している。
時点１・・・（A、B）
↓
時点２・・・（B、C）
↓
時点３・・・（B、C）
↓
時点４・・・（C、D）
↓
時点５・・・（C、E）
【００２５】
この例においては、アプリ識別子Bのアプリは時点１〜３において起動されていたと判断され、アプリ識別子Cのアプリは時点２〜５において起動されていたと判断され、時点４で候補にあがったアプリ識別子Dのアプリは起動アプリ時系列情報には取り込まれない。なお、「目的とする起動アプリ時系列情報」のデータ表現形式は自由に実施してよいことは、当業者には自明であろう。
【００２６】
＝＝＝発明特定事項＝＝＝
以上に詳細に説明した技術事項を整理すると、この発明は、つぎの事項（１）〜（３）により特定されるコンピューティングの方法であると把握することができる。
（１）アンドロイド端末にインストールした特定アプリにより getRunningAppProcesses メソッドを所定間隔で繰り返しコールし、アンドロイドＯＳから各コール時点の起動中アプリプロセス情報を取得すること
（２）１回のコールにより取得した起動中アプリプロセス情報の中に以下の条件１〜条件４のすべてに該当するプロセス情報があるか否かを判断し、ある場合にはそのプロセス情報に該当するアプリ識別子を当該コール時点での起動中アプリ候補として抽出すること
《条件１》「重要度」の項目が「フォアグランド」であること
《条件２》「重要度の理由」の項目が「不明」であること
《条件３》「当該プロセスで実行中のアプリの識別子一覧」の項目に含まれるアプリ識別子が１つであること
《条件４》「プロセス名」項目が「当該プロセスで実行中のアプリの識別子一覧」の項目に１つだけ記述されているアプリ識別子と同名であること
（３）所定時間を超えて継続して起動中アプリ候補として抽出されたアプリ識別子を起動アプリ時系列情報に取り込むこと
【００２７】
また、先に解説した特開２０１３−７０３５３号公報に記載された発明と同様に、この発明は、前記特定アプリをインストールした複数のアンドロイド端末と、これらアンドロイド端末と個別に通信するインターネット上のサーバーとにより上記発明特定事項（１）〜（３）に記載のコンピューティングの方法を分散処理により実施し、前記サーバーにおいて、各アンドロイド端末の識別情報と、各アンドロイド端末から得た情報に基づく前記起動アプリ時系列情報とを対応づけして集約する方法であるところ、具体的な実施にあたっては上記の分散処理の形態を自由に設計してよいことは、当業者には自明であろう。
【００２８】
この発明の実施にあたっては、インターネット上のサーバーにおいて、各アンドロイド端末の識別情報と、各アンドロイド端末での起動アプリ時系列情報とを対応づけして集約するところ、先に述べたように、起動アプリ時系列情報のデータ表現については自由に設計して実施すればよい。たとえば、アプリ識別子（アプリ名）と、このアプリを起動アプリであると検知した日時とを対応づけして順次記録するデータ表現としてよい。
【００２９】
また、アンドロイド端末において getRunningAppProcessesメソッドにより前述した起動中アプリプロセス情報を取得することをスタートとして、インターネット上のサーバーに所定のデータ表現にした起動アプリ時系列情報を記録することをゴールとするコンピューティングプロセスについては、上述のように適宜に設計された分散処理により実施することができるところ、このことを前提として、この発明の射程は、そうした分散処理を実施するようにプログラムされたサーバーに及ぶものであり、また、そうした分散処理を実施するためにアンドロイド端末にインストールされる特定アプリにも及ぶものである。
【要約】
【解決課題】従前方法で利用していたアンドロイドＯＳの getRecentTasksメソッドが新版では廃止されたので、新たな方法を開発することを迫られた。
【解決手段】アンドロイドＯＳの getRunningAppProcessesを所定間隔で繰り返しコールして、取得情報中に条件１〜条件４のすべてに該当するプロセス情報がある場合にはそのプロセス情報に該当するアプリ識別子を当該コール時点での起動中アプリ候補として抽出する。《条件１》「重要度」の項目が「フォアグランド」であること《条件２》「重要度の理由」の項目が「不明」であること《条件３》「当該プロセスで実行中のアプリの識別子一覧」の項目に含まれるアプリ識別子が１つであること《条件４》「プロセス名」項目が「当該プロセスで実行中のアプリの識別子一覧」の項目に１つだけ記述されているアプリ識別子と同名であること。所定時間を超えて継続して起動中アプリ候補として抽出されたアプリ識別子を起動アプリ時系列情報に取り込む。