2013-07-16 44 views
13

Trên Android 4.0 trở đi, chúng tôi có các tùy chọn kiểm soát mức sử dụng dữ liệu trong điện thoại. Vui lòng kiểm tra ảnh chụp màn hình được đính kèm để hiểu thêm.Làm thế nào để lập trình hiển thị việc sử dụng dữ liệu của tất cả các ứng dụng?

http://developer.android.com/about/versions/android-4.0-highlights.html

Bây giờ tôi có một số yêu cầu để kiểm tra những điều này (Sử dụng dữ liệu Tất cả các ứng dụng trong khoảng thời gian cụ/ngày cụ thể) từ ứng dụng của tôi. Làm thế nào tôi có thể đạt được điều này? Tôi cũng đang sử dụng lớp dưới đây để biết chi tiết về Cách sử dụng mạng.

http://developer.oesf.biz/em/developer/reference/eggplant/android/net/NetworkStatsHistory.html

Vui lòng kiểm tra hình ảnh liên kết bên dưới. Tôi cần phát triển cùng một loại ứng dụng.

Cám ơn chia sẻ mã của bạn, nhưng tôi cần phải biết dữ liệu được sử dụng bởi mỗi ứng dụng thay vì tất cả các ứng dụng. Cho đến nay tôi quan sát thấy trong các liên kết không ai nói về việc sử dụng dữ liệu của các ứng dụng riêng lẻ. Tôi đã biết cách hiển thị các ứng dụng đã cài đặt trong thiết bị. Bây giờ tôi muốn biết dữ liệu được sử dụng bởi mỗi và mọi ứng dụng là gì.

Tôi đang sử dụng mã bên dưới để biết danh sách các ứng dụng đã cài đặt trong thiết bị.

private ArrayList<PInfo> getInstalledApps(boolean getSysPackages) { 
    ArrayList<PInfo> res = new ArrayList<PInfo>(); 

    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 

    for (int i=0; i<packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((!getSysPackages) && (p.versionName == null)) { 
      continue ; 
     } 
     PInfo newInfo = new PInfo(); 
     newInfo.setAppname(p.applicationInfo.loadLabel(getPackageManager()).toString()); 
     newInfo.setPname(p.packageName); 
     newInfo.setVersionName(p.versionName); 
     newInfo.setVersionCode(p.versionCode); 
     newInfo.setIcon(p.applicationInfo.loadIcon(getPackageManager())); 

     res.add(newInfo); 
    } 
    return res; 
} 

Làm cách nào để biết dữ liệu được ứng dụng sử dụng là gì?

Thực ra, tôi cần giải pháp cho phép sử dụng dữ liệu của các ứng dụng trong một khoảng thời gian nhất định, tức là trong khoảng hai ngày.

+0

Xin vui lòng giải thích ** hoàn toàn và chính xác ** những gì "những điều này" là bạn cần phải "kiểm tra" từ ứng dụng của bạn. – CommonsWare

+0

hello CommonsWare tôi cập nhật bài viết của tôi có thể kiểm tra nó bây giờ –

+0

bạn đã nhận được câu trả lời đúng cho câu hỏi của bạn hoặc bạn đã thực hiện thành công yêu cầu của bạn? nếu có xin vui lòng chia sẻ các giải pháp, tôi cũng đang tìm kiếm nó. –

Trả lời

4

Bạn có thể sử dụng android.net.TrafficStats để nhận chi tiết sử dụng mạng.

Vui lòng tìm chương trình mẫu dưới đây cho tương tự.

package com.anchit.trafficstatus; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 

public class TrafficStatus extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Log.e("bytes recvd", "" + android.net.TrafficStats.getMobileRxBytes()); 

     Log.e("Total", "Bytes received" + android.net.TrafficStats.getTotalRxBytes()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
} 
+0

@kiran_b bạn cũng có thể sử dụng các phương thức liên quan của UID có sẵn trong lớp TrafficStats –

+0

Cảm ơn bạn đã chia sẻ mã của mình nhưng tôi cần biết dữ liệu được sử dụng bởi mỗi ứng dụng thay vì tất cả các ứng dụng –

+1

@Kiran_b Kính gửi, đó là lý do tôi đề cập đến API của lớp TrafficStats để tìm hiểu về UID. đây có thể là quá trình cụ thể có thể giúp bạn có được chi tiết cho từng quy trình. vui lòng theo liên kết của stackoverflow được đề cập bên dưới http: // stackoverflow.com/questions/11939939/android-how-can-i-find-the-data-usage-on-per-application-base –

9

Đầu tiên, có được một danh sách các thông tin xử lý tất cả các ứng dụng chạy:

List<RunningAppProcessInfo> 

Sau đó lấy UID của mọi ứng dụng và nhận được sau đó gửi và nhận lưu lượng của các ứng dụng:

// Get running processes 
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); 
List<RunningAppProcessInfo> runningApps = manager.getRunningAppProcesses(); 

for (RunningAppProcessInfo runningApp : runningApps) { 

    // Get UID of the selected process 
    int uid = ((RunningAppProcessInfo)getListAdapter().getItem(position)).uid; 

    // Get traffic data 
    long received = TrafficStats.getUidRxBytes(uid); 
    long send = TrafficStats.getUidTxBytes(uid); 
    Log.v("" + uid , "Send :" + send + ", Received :" + received); 
} 
+1

làm thế nào nó có thể sửa đổi để truy vấn dữ liệu chỉ có Rx/Tx ngày hôm nay? –

+0

@ShashankKumar bạn đã có giải pháp để lấy dữ liệu vào ngày khôn ngoan .. :) –

+0

@NarenderReddy: Không, phải chạy một dịch vụ trong nền/NetworkChangeReceiver để tính toán sử dụng bằng cách trừ từ val trước đó cho mỗi ứng dụng. –

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