2016-04-06 8 views
5

私は開発しているAndroid用のキーボードアプリを持っています。言語よりも単純な記号を出力するので、機密情報や単語が含まれていないため、ユーザーの行動を追跡できることが大好きです。InputMethodServiceを拡張するクラスのgetDefaultTracker()?

問題は、AndroidのInputMethodServiceは(私を修正すること自由に感じ、ここでは可能な言葉遣いのエラー、)は、Google AnalyticsのAndroidのSDKにアクセスすることを可能にするものである、Applicationを延長しないことです。

私が始めるためのガイドhereを追ってきたが、これは私がTrackerオブジェクトを取得するために参照コードです:

/* 
* Copyright Google Inc. All Rights Reserved. 
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
*  http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, software 
* distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/ 

package com.google.samples.quickstart.analytics; 

import android.app.Application; 

import com.google.android.gms.analytics.GoogleAnalytics; 
import com.google.android.gms.analytics.Tracker; 

/** 
* This is a subclass of {@link Application} used to provide shared objects for this app, such as 
* the {@link Tracker}. 
*/ 
public class AnalyticsApplication extends Application { 
    private Tracker mTracker; 

    /** 
    * Gets the default {@link Tracker} for this {@link Application}. 
    * @return tracker 
    */ 
    synchronized public Tracker getDefaultTracker() { 
    if (mTracker == null) { 
     GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
     // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG 
     mTracker = analytics.newTracker(R.xml.global_tracker); 
    } 
    return mTracker; 
    } 
} 

これはただ、基本的には私のアプリの主な活動を追跡するためのすべての偉大ですいくつかの広告と設定のショートカットを含む短い説明のセットを含むビュー。

キーボードを追跡したいと思います。具体的には、InputMethodServiceはGoogleアナリティクスを公開していないため、それほど明白ではありません。

InputMethodServiceに拡張され、Applicationではないクラスの中でGoogleアナリティクスAndroid SDKを使用するにはどうすればよいですか?

問題を明確にしていない場合は、可能な限り投稿を更新します。

答えて

3

GoogleアナリティクスのAndroid SDKを使用する場合は、Applicationは必要ありません。

この例では、Applicationクラス内にヘルパーメソッドgetDefaultTrackerを追加して、デフォルトのトラッカーへのアクセスを集中化して簡単にします。ほとんどの場合、これが最良の解決策になります。このため、この例ではこのアプローチを推奨しています。しかし、InputMethodServiceのように、この解決策が実現できないいくつかの例外があります。あなたがdocumentationで見ることができるように

は方法getInstanceのパラメータがあるContext

のpublic static GoogleAnalyticsのgetInstance(コンテキストコンテキスト)

が必要なときにそれを作成し、GoogleAnalyticsのインスタンスを取得します。 。 あなたのInputMethodService内に直接非常に同じgetDefaultTrackerメソッドを使用することができます。このような理由から任意のスレッド

からこのメソッドを呼び出すことが安全です。たとえば:

public class InputMethodServiceSample extends InputMethodService { 

    private Tracker mTracker; 

    /** 
    * Gets the default {@link Tracker} for this {@link Application}. 
    * @return tracker 
    */ 
    synchronized public Tracker getDefaultTracker() { 
     if (mTracker == null) { 
      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
      // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG 
      mTracker = analytics.newTracker(R.xml.global_tracker); 
     } 
     return mTracker; 
    } 
} 

あなたはあなたのサービスの各メソッドのメソッドgetDefaultTrackerを使用することができます。

+0

素晴らしいですが、私はこれを撃つでしょう。クイックスタートの例で、 'Tracker'にアクセスするためのラッパークラスの使用を推奨する理由はありますか? – Kehlan

+0

ほとんどの場合、それが最良の解決策になると思います。私は明確にしようと私の答えを更新しました。 –