2015-10-23 18 views
13

Tôi đang cố tạo thư viện, hãy gọi nó là L. Một công ty có ứng dụng android, nói A.Triển khai thư viện để theo dõi tất cả các sự kiện trong một ứng dụng

L có thể được liên kết với A sao cho mã của A, dev chỉ cần thêm một cái gì đó như:

L l = new L ("client_id") l.startTrack();

Bây giờ, L có thể theo dõi tất cả các nhấp chuột xảy ra trong A và chuyển đến máy chủ để ghi nhật ký. AppSee là một sản phẩm đã làm điều này.

tôi tự hỏi làm sao tôi có thể ngăn chặn mọi hành động sử dụng để có được những tên mục tiêu hành động (nút tiêu đề? Textfield?)

Cảm ơn bạn!

+0

cộng với một, điều tương tự tôi muốn, bạn có tìm thấy bất kỳ cách nào không? @Mark –

Trả lời

0

OnClickListener là Giao diện. để bạn có thể triển khai trong bất kỳ lớp học nào

6

Điều bạn đang hỏi là EventTracking, như trong GoogleAnalytics. Nhưng cách tiếp cận bạn đang làm là khác nhau. Trong Google phân tích một trong những nhu cầu để bắt đầu sự kiện để theo dõi sự kiện. Giống như nói rằng bạn có một nút 3 và bạn cần phải theo dõi từng nút một cách riêng biệt, có bạn đặt 3 trackers sự kiện riêng biệt.

Nếu bạn muốn theo dõi tất cả các sự kiện đang diễn ra hoạt động, bạn cần triển khai onInterceptTouchEvent() của Hoạt động. Bất cứ khi nào một sự kiện cảm ứng xảy ra trong một hoạt động, nó sẽ đi qua phương thức nói trên.

Như Google cho biết

Thực hiện phương pháp này để ngăn chặn tất cả các sự kiện chuyển động màn hình cảm ứng. Điều này cho phép bạn xem các sự kiện khi chúng được gửi đến số trẻ em của bạn và sở hữu cử chỉ hiện tại tại bất kỳ thời điểm nào.

một cách thận trọng

Sử dụng chức năng này có một số dịch vụ chăm sóc, vì nó có một tương tác khá phức tạp với View.onTouchEvent (MotionEvent), và sử dụng nó đòi hỏi thực hiện phương pháp đó cũng như cái này theo cách chính xác.

Để biết thêm chi tiết sự kiện, look here.

+0

Xin chào, trong trường hợp này, tôi sẽ cần triển khai "onInterceptTouchEvent()" trên mọi hoạt động tôi muốn theo dõi, đúng không? Vì tôi đang tạo một thư viện để theo dõi ngay bây giờ, nó không có vẻ tốt khi làm điều đó –

+0

Đối tượng theo định hướng nói không, Bạn cần tạo một Hoạt động cơ bản và mở rộng mọi hoạt động thông qua nó. Theo cách đó, tất cả các sự kiện liên lạc sẽ đi qua hoạt động của bạn. –

+0

Điều gì xảy ra nếu ứng dụng khách đang sử dụng lớp con của hoạt động, ví dụ: AppCompatActivity, ActionBarActivity, FragmentActivity? –

0

Thật dễ dàng. Vì mỗi điều khiển trên màn hình là một lớp con của xem, bạn có thể làm một cái gì đó như thế này:

public static void logClicksOnMe(View v){ 
    v.setOnClickListener(new View.OnClickListener{ 
     @Override 
     public void onClick(View v){ 
      //TODO Log code 
     } 
    }); 
} 

Rõ ràng rằng sẽ phá hủy các thính giả mà bạn đã thiết lập trên đối tượng như vậy, nhưng bạn có thể làm một cái gì đó như thế này:

public static void setLoggedListener(View v, View.OnClickListener listener){ 
    v.setOnClickListener(new View.OnClickListener{ 
     @Override 
     public void onClick(View v){ 
      //TODO Log code 
      if(listener!=null) listener.onClick(v); 
     } 
    }); 
} 

Nhà phát triển sẽ phải đặt người nghe theo cách thủ công, nhưng anh đã phải làm như vậy, vì vậy không phải khối lượng công việc hoặc mã sẽ thay đổi nhiều. Lợi thế trên giao diện hoạt động onInterceptTouchEvent() là bạn hoàn toàn có thể kiểm soát chế độ xem nào sẽ được theo dõi và nhà phát triển không bị ràng buộc sử dụng hoạt động trừu tượng của bạn (giả sử anh ta đang sử dụng các hoạt động trừu tượng khác từ bên thứ ba, như SlidingActivity hoặc mọi thứ như vậy.), do đó, các nỗ lực bảo trì và triển khai khá nhỏ.

0
Not exactly, actually there is something more easier, you can ask them to inherit there activities from your activity 
eg. A extends L; 
Do this in following steps. 

1. Create the library(say L is com.click.counter), with event handles counter like explained in many reply above, using view.onclicklistner. In onclick event, The only difference is use package name. As context is of the app which is calling the library, you can use 
Context::getPackageName 
http://developer.android.com/reference/android/content/Context.html#getPackageName%28%29 

2. onclick events, you may log and sync in one go, at end of day/scheduled time, or on every click. you may use httphandler for that 
See 
https://cloud.google.com/appengine/docs/go/gettingstarted/helloworld?hl=en 

2. Create a test apk(A),add the library as dependency in gradle. 
dependencies { 
    compile 'com.click.counter' 
    } 

3. Inherit all the activity in test apk from class A 
Các vấn đề liên quan