2016-04-06 19 views
5

Tôi có một ứng dụng bàn phím cho Android mà tôi đang phát triển và nó xuất ra các ký hiệu đơn giản thay vì ngôn ngữ, vì vậy, tôi rất muốn có thể theo dõi hoạt động của người dùng vì không có thông tin nhạy cảm hoặc các từ liên quan.getDefaultTracker() từ một lớp mở rộng InputMethodService?

Vấn đề là Android của InputMethodService không không mở rộng Application, đó là những gì cho phép bạn truy cập vào Android SDK (lỗi từ ngữ có thể, ở đây, cảm thấy tự do để chính xác cho tôi) của Google Analytics.

Tôi đã theo hướng dẫn here để bắt đầu, và đây là đoạn code tôi tham khảo để có được các đối tượng 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; 
    } 
} 

Đây là tất cả tuyệt vời để theo dõi hoạt động chính ứng dụng của tôi, mà là về cơ bản chỉ một chế độ xem chứa tập hợp các hướng dẫn ngắn với một vài quảng cáo và lối tắt cài đặt. Như tôi đã nói trước đây, tôi muốn theo dõi bàn phím và cách thực hiện điều đó không rõ ràng vì InputMethodService không hiển thị Google Analytics.

Tôi làm cách nào để sử dụng Google Analytics Android SDK bên trong một lớp mở rộng InputMethodService nhưng không phải là Application?

Vui lòng cho tôi biết nếu tôi chưa giải quyết rõ vấn đề của mình, tôi sẽ cập nhật bài đăng bất kỳ cách nào tôi có thể.

Trả lời

3

Bạn không cần phải có Application để sử dụng SDK Android của Google Analytics.

Ví dụ thêm phương thức trợ giúp getDefaultTracker vào lớp Application để tập trung và dễ dàng truy cập vào trình theo dõi mặc định. Trong hầu hết các trường hợp, đây sẽ là giải pháp tốt nhất có thể, vì lý do này, ví dụ đề xuất phương pháp này. Nhưng có một số ngoại lệ trong đó giải pháp này không khả thi, như trong số InputMethodService.

Như bạn có thể nhìn thấy trong documentation tham số của phương pháp getInstance là một Context:

public static Google Analytics getInstance (Context ngữ cảnh)

Gets trường hợp của Google Analytics, tạo ra nó khi cần thiết . Nó là an toàn để gọi phương pháp này từ bất kỳ thread

Vì lý do này, bạn có thể sử dụng rất giống phương pháp getDefaultTracker trực tiếp bên InputMethodService của bạn. Ví dụ:

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; 
    } 
} 

thì bạn có thể sử dụng các phương pháp getDefaultTracker trong mọi phương thức dịch vụ của mình.

+0

Tuyệt vời, tôi sẽ chụp ảnh này. Bạn có bất kỳ ý tưởng nào tại sao ví dụ bắt đầu nhanh đề xuất sử dụng lớp trình bao bọc để truy cập vào 'Trình theo dõi' không? – Kehlan

+0

Tôi nghĩ bởi vì nó sẽ là giải pháp tốt nhất trong hầu hết các trường hợp. Tôi vừa cập nhật câu trả lời của mình để cố gắng làm rõ. –

Các vấn đề liên quan