2015-12-22 2 views
0

Im Попытка настроить Google Analytics в моем приложении. Я последовал Google учебник ниже https://developers.google.com/analytics/devguides/collection/android/v4/Ошибка Настройка Google Analytics

Но получил следующие ошибки

Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to 

, когда я поставил код, приведенный ниже в на создание в MainActivity:

AnalyticsApplication application = (AnalyticsApplication) getApplication(); 
    mTracker = application.getDefaultTracker(); 

AnalyticsApplication Класс:

import android.app.Application; 

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

общественного класса AnalyticsApplication расширяет Application {

private Tracker mTracker; 

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

}

Gradle ПРОЕКТ

classpath 'com.google.gms:google-services:1.5.0-beta2' 

Gradle МОДУЛЬ

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:21.0.3' 
compile 'com.google.android.gms:play-services-ads:8.3.0' 
compile 'com.google.android.gms:play-services-analytics:8.3.0' 


compile 'com.google.android.gms:play-services-appindexing:8.3.0' 

} применить плагин:

AndroidMaifest

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.WRITE_SMS" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


    <service 
     android:name=".CallDetectService" 
     android:enabled="true" 
     android:exported="false" > 
    </service> 

    <receiver 
     android:name=".RingerModeStateReceiver" 
     android:enabled="true" 
     android:exported="true" > 
     <intent-filter> 
      <action android:name="android.media.RINGER_MODE_CHANGED" /> 
     </intent-filter> 
    </receiver> 
    <!-- ATTENTION: This was auto-generated to add Google Play services to your project for 
     App Indexing. See https://g.co/AppIndexing/AndroidStudio for more information. --> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

</application> 

Я также иметь конфигурацию 'com.google.gms.google-услуг' файл, скопированный в каталог приложения. , если я не укажу код в главной операции, которую будет выполнять мое приложение, но ничего не отображается в моей учетной записи Analytics .

Любая помощь была бы принята с благодарностью. Я следил за учебным пособием Google, но ничего не происходило тогда, когда я вставлял код в главную активность моего приложения.

+0

Привет, вы можете показать нам свой файл манифеста? – Hemix

+0

Нет, для этого нужно использовать большой молот для расширения класса приложения. Получить трекер, передав ему контекстный объект. – AndRSoid

+0

В манифесте нет класса приложения, объявленного в теге приложения. – AndRSoid

ответ

2

Чтобы объявить класс приложения в файле манифеста, используйте android: name = "com.example.AnalyticsApplication" в теге приложения.

Или использовать аналитику вспомогательный класс:

public class AnalyticsHelper { 

    private static HashMap<TrackerName, Tracker> sTrackers = new HashMap<TrackerName, Tracker>(); 

    public static synchronized Tracker getTracker(Context context, TrackerName trackerId) { 
     if (!sTrackers.containsKey(trackerId)) { 

      GoogleAnalytics analytics = GoogleAnalytics.getInstance(context); 
      Tracker t = null; 

      switch (trackerId) { 
       case APP_TRACKER: 
        t = analytics.newTracker(R.xml.analytics_app_tracker); 
        break; 
      } 

      sTrackers.put(trackerId, t); 
     } 
     return sTrackers.get(trackerId); 
    } 

    public enum TrackerName { 
     APP_TRACKER, // App specific tracker ID 
    } 
} 

и вызовите AnalyticsHelper.getTracker(this, TrackerName.APP_TRACKER) ваш класс Application.

+0

После добавления класса Analytics к моему androidManifest, просто добавив ti в манифест, в котором теперь работает приложение, но пока ничего не отображается в моей учетной записи Analytics. мне нужно отправить мероприятие? как строитель хитов? –

+0

Да, это работает! в конце концов! Спасибо @AndRSoid. добавление класса AnalyticsApplication в мой манифест android трюк! для этого потребовалось время. настоящее время также работает, и это работает почти мгновенно, спасибо Счастливое Рождество! :) –

Смежные вопросы