感谢您的回答,但它仍然无法正常工作。
我已创建:
公共类GAnalytics扩展应用{
//下面一行应改为包括正确的属性ID。
私有静态最后弦乐PROPERTY_ID =UA-XXXX-X;
公共静态INT GENERAL_TRACKER = 0;
公共枚举TrackerName {
APP_TRACKER,//跟踪器只用在这个应用程序。
GLOBAL_TRACKER,//使用由一家公司所有的应用程序跟踪。例如:卷起跟踪。
ECOMMERCE_TRACKER,//跟踪从一个公司所使用的所有电子商务交易。
}
HashMap的< TrackerName,跟踪> mTrackers =新的HashMap< TrackerName,跟踪>();
公共GAnalytics(){
超();
}
同步跟踪getTracker(TrackerName trackerId){
如果(!mTrackers.containsKey(trackerId)){
GoogleAnalytics分析= GoogleAnalytics.getInstance(本);
跟踪T =(trackerId == TrackerName.APP_TRACKER)? analytics.newTracker(PROPERTY_ID)
(trackerId == TrackerName.GLOBAL_TRACKER)? analytics.newTracker(
R.xml.global_tracker)
:analytics.newTracker(R.xml.ecommerce_tracker);
mTrackers.put(trackerId,T);
}
返回mTrackers.get(trackerId);
}
}
在OnCreate中我MainActivity:
字符串ACTIVITY_NAME =MyApp的;
//获取跟踪。
跟踪T =((GAnalytics)getApplication())getTracker(TrackerName.APP_TRACKER)。
//设置的网名。
//如果路径是一个字符串再presenting的网名。
t.setScreenName(ACTIVITY_NAME);
//发送一个屏幕视图。
t.send(新HitBuilders.AppViewBuilder()建());
我已经添加在应用程序清单(机器人:名字......)
和我的日志:
05-16 18:27:41.705:E / AndroidRuntime(25187):致命异常:主要 05-16 18:27:41.705:E / AndroidRuntime(25187):工艺:com.MyApplication.Banana,PID:25187 05-16 18:27:41.705:E / AndroidRuntime(25187):java.lang.NoClassDefFoundError的:com.google.android.gms.analytics.GoogleAnalytics 05-16 18:27:41.705:E / AndroidRuntime(25187):在com.MyApplication.Banana.GAnalytics.getTracker(GAnalytics.java:30) 05-16 18:27:41.705:E / AndroidRuntime(25187):在com.MyApplication.Banana.MainActivity.onCreate(MainActivity.java:56) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.Activity.performCreate(Activity.java:5231) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.os.Handler.dispatchMessage(Handler.java:102) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.os.Looper.loop(Looper.java:136) 05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 18:27:41.705:E / AndroidRuntime(25187):在java.lang.reflect.Method.invokeNative(本机方法) 05-16 18:27:41.705:E / AndroidRuntime(25187):在java.lang.reflect.Method.invoke(Method.java:515) 05-16 18:27:41.705:E / AndroidRuntime(25187):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 05-16 18:27:41.705:E / AndroidRuntime(25187):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 18:27:41.705:E / AndroidRuntime(25187):在dalvik.system.NativeStart.main(本机方法)
解决方案在你的链接描述的那样,GA-相关code应放在应用程序里面
类而不是活动
。
创建一个类继承应用程序
是这样的:
公共类MyApplication的扩展应用{
//跟踪相关code应该放在这里(枚举,getTracker,mTrackers)
}
然后在的AndroidManifest.xml
,根据应用程序
标记,更换安卓:名称
上述所有MyApplication
类。
跟踪器code应该放在 Activity.oncreate
的方法,如
公共类MainActivity延伸活动{
。
。
。
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
//获取跟踪。
跟踪T =((AnalyticsSampleApp)getApplication())。getTracker(
TrackerName.APP_TRACKER);
//设置的网名。
//如果路径是一个字符串再presenting的网名。
t.setScreenName(路径);
//发送一个屏幕视图。
t.send(新HitBuilders.AppViewBuilder()建());
}
。
。
。
}
Thanks for the answer, but it still does not work.
I have create :
public class GAnalytics extends Application{
// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID = "UA-XXXX-X";
public static int GENERAL_TRACKER = 0;
public enum TrackerName {
APP_TRACKER, // Tracker used only in this app.
GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}
HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
public GAnalytics() {
super();
}
synchronized Tracker getTracker(TrackerName trackerId) {
if (!mTrackers.containsKey(trackerId)) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
: (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(
R.xml.global_tracker)
: analytics.newTracker(R.xml.ecommerce_tracker);
mTrackers.put(trackerId, t);
}
return mTrackers.get(trackerId);
}
}
Under OnCreate in my MainActivity:
String ACTIVITY_NAME = "MyApp";
// Get tracker.
Tracker t = ((GAnalytics) getApplication()).getTracker(TrackerName.APP_TRACKER);
// Set screen name.
// Where path is a String representing the screen name.
t.setScreenName(ACTIVITY_NAME);
// Send a screen view.
t.send(new HitBuilders.AppViewBuilder().build());
I have added the manifest under Application (android: name...)
And my Log:
05-16 18:27:41.705: E/AndroidRuntime(25187): FATAL EXCEPTION: main 05-16 18:27:41.705: E/AndroidRuntime(25187): Process: com.MyApplication.Banana, PID: 25187 05-16 18:27:41.705: E/AndroidRuntime(25187): java.lang.NoClassDefFoundError: com.google.android.gms.analytics.GoogleAnalytics 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.MyApplication.Banana.GAnalytics.getTracker(GAnalytics.java:30) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.MyApplication.Banana.MainActivity.onCreate(MainActivity.java:56) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.Activity.performCreate(Activity.java:5231) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.access$800(ActivityThread.java:135) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.os.Handler.dispatchMessage(Handler.java:102) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.os.Looper.loop(Looper.java:136) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 18:27:41.705: E/AndroidRuntime(25187): at java.lang.reflect.Method.invokeNative(Native Method) 05-16 18:27:41.705: E/AndroidRuntime(25187): at java.lang.reflect.Method.invoke(Method.java:515) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 18:27:41.705: E/AndroidRuntime(25187): at dalvik.system.NativeStart.main(Native Method)
解决方案
As described in your link, the GA-related code should be placed inside the Application
class instead of the Activity
.
Create a class extends Application
like this:
public class MyApplication extends Application{
//the tracker related code should be place here (the enum, getTracker, mTrackers)
}
then in your AndroidManifest.xml
, under the application
tag, replace the android:name
with the above MyApplication
class.
The tracker code should be placed in the Activity.oncreate
method such as
public class MainActivity extends Activity {
.
.
.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get tracker.
Tracker t = ((AnalyticsSampleApp) getApplication()).getTracker(
TrackerName.APP_TRACKER);
// Set screen name.
// Where path is a String representing the screen name.
t.setScreenName(path);
// Send a screen view.
t.send(new HitBuilders.AppViewBuilder().build());
}
.
.
.
}