Wednesday, March 5, 2014

Android is the engineering model, using statistical data in the data can get to?


Dial interface is enter * # * # 4636 # * # * After that, there will be a use of statistical data, in writing android procedures, is there any way you can get these data? ?<-! Main posts under Banner (D4) -><-! Posts under the main text (D5) ->
Reply:
Nobody knows yet. . .
Reply:
I suggest you look at the source code. . . .
 

/ **
* Copyright (C) 2007 The Android Open Source Project
*
* 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.android.settings;

import com.android.internal.app.IUsageStats;
import com.android.settings.R;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import com.android.internal.os.PkgUsageStats;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

/ **
* Activity to display package usage statistics.
* /
public class UsageStats extends Activity implements OnItemSelectedListener {
private static final String TAG = "UsageStatsActivity";
private static final boolean localLOGV = false;
private Spinner mTypeSpinner;
private ListView mListView;
private IUsageStats mUsageStatsService;
private LayoutInflater mInflater;
private UsageStatsAdapter mAdapter;
private PackageManager mPm;

public static class AppNameComparator implements Comparator {
Map mAppLabelList;
AppNameComparator (Map appList) {
mAppLabelList = appList;
}
public final int compare (PkgUsageStats a, PkgUsageStats b) {
String alabel = mAppLabelList.get (a.packageName) toString ();.
String blabel = mAppLabelList.get (b.packageName) toString ();.
return alabel.compareTo (blabel);
}
}

public static class LaunchCountComparator implements Comparator {
public final int compare (PkgUsageStats a, PkgUsageStats b) {
/ / Return by descending order
return b.launchCount - a.launchCount;
}
}

public static class UsageTimeComparator implements Comparator {
public final int compare (PkgUsageStats a, PkgUsageStats b) {
long ret = a.usageTime-b.usageTime;
if (ret == 0) {
return 0;
}
if (ret <0) {
return 1;
}
return -1;
}
}

/ / View Holder used when displaying views
static class AppViewHolder {
TextView pkgName;
TextView launchCount;
TextView usageTime;
}

class UsageStatsAdapter extends BaseAdapter {
/ / Constants defining order for display order
private static final int _DISPLAY_ORDER_USAGE_TIME = 0;
private static final int _DISPLAY_ORDER_LAUNCH_COUNT = 1;
private static final int _DISPLAY_ORDER_APP_NAME = 2;

private int mDisplayOrder = _DISPLAY_ORDER_USAGE_TIME;
private List mUsageStats;
private LaunchCountComparator mLaunchCountComparator;
private UsageTimeComparator mUsageTimeComparator;
private AppNameComparator mAppLabelComparator;
private HashMap mAppLabelMap;

UsageStatsAdapter () {
mUsageStats = new ArrayList ();
mAppLabelMap = new HashMap ();
PkgUsageStats [] stats;
try {
stats = mUsageStatsService.getAllPkgUsageStats ();
} Catch (RemoteException e) {
Log.e (TAG, "Failed initializing usage stats service");
return;
}
if (stats == null) {
return;
}
for (PkgUsageStats ps: stats) {
mUsageStats.add (ps);
/ / Load application labels for each application
CharSequence label;
try {
ApplicationInfo appInfo = mPm.getApplicationInfo (ps.packageName, 0);
label = appInfo.loadLabel (mPm);
} Catch (NameNotFoundException e) {
label = ps.packageName;
}
mAppLabelMap.put (ps.packageName, label);
}
/ / Sort list
mLaunchCountComparator = new LaunchCountComparator ();
mUsageTimeComparator = new UsageTimeComparator ();
mAppLabelComparator = new AppNameComparator (mAppLabelMap);
sortList ();
}
public int getCount () {
return mUsageStats.size ();
}

public Object getItem (int position) {
return mUsageStats.get (position);
}

public long getItemId (int position) {
return position;
}

public View getView (int position, View convertView, ViewGroup parent) {
/ / A ViewHolder keeps references to children views to avoid unneccessary calls
/ / To findViewById () on each row.
AppViewHolder holder;

/ / When convertView is not null, we can reuse it directly, there is no need
/ / To reinflate it. We only inflate a new View when the convertView supplied
/ / By ListView is null.
if (convertView == null) {
convertView = mInflater.inflate (R.layout.usage_stats_item, null);

/ / Creates a ViewHolder and store references to the two children views
/ / We want to bind data to.
holder = new AppViewHolder ();
holder.pkgName = (TextView) convertView.findViewById (R.id.package_name);
holder.launchCount = (TextView) convertView.findViewById (R.id.launch_count);
holder.usageTime = (TextView) convertView.findViewById (R.id.usage_time);
convertView.setTag (holder);
} Else {
/ / Get the ViewHolder back to get fast access to the TextView
/ / And the ImageView.
holder = (AppViewHolder) convertView.getTag ();
}

/ / Bind the data efficiently with the holder
PkgUsageStats pkgStats = mUsageStats.get (position);
if (pkgStats! = null) {
CharSequence label = mAppLabelMap.get (pkgStats.packageName);
holder.pkgName.setText (label);
holder.launchCount.setText (String.valueOf (pkgStats.launchCount));
holder.usageTime.setText (String.valueOf (pkgStats.usageTime) + "ms");
} Else {
Log.w (TAG, "No usage stats info for package:" + position);
}
return convertView;
}

void sortList (int sortOrder) {
if (mDisplayOrder == sortOrder) {
/ / Do nothing
return;
}
mDisplayOrder = sortOrder;
sortList ();
}
private void sortList () {
if (mDisplayOrder == _DISPLAY_ORDER_USAGE_TIME) {
if (localLOGV) Log.i (TAG, "Sorting by usage time");
Collections.sort (mUsageStats, mUsageTimeComparator);
} Else if (mDisplayOrder == _DISPLAY_ORDER_LAUNCH_COUNT) {
if (localLOGV) Log.i (TAG, "Sorting launch count");
Collections.sort (mUsageStats, mLaunchCountComparator);
} Else if (mDisplayOrder == _DISPLAY_ORDER_APP_NAME) {
if (localLOGV) Log.i (TAG, "Sorting by application name");
Collections.sort (mUsageStats, mAppLabelComparator);
}
notifyDataSetChanged ();
}
}

/ ** Called when the activity is first created. * /
protected void onCreate (Bundle icicle) {
super.onCreate (icicle);
mUsageStatsService = IUsageStats.Stub.asInterface (ServiceManager.getService ("usagestats"));
if (mUsageStatsService == null) {
Log.e (TAG, "Failed to retrieve usagestats service");
return;
}
mInflater = (LayoutInflater) getSystemService (Context.LAYOUT_INFLATER_SERVICE);
mPm = getPackageManager ();

setContentView (R.layout.usage_stats);
mTypeSpinner = (Spinner) findViewById (R.id.typeSpinner);
mTypeSpinner.setOnItemSelectedListener (this);

mListView = (ListView) findViewById (R.id.pkg_list);
/ / Initialize the inflater

mAdapter = new UsageStatsAdapter ();
mListView.setAdapter (mAdapter);
}

public void onItemSelected (AdapterView parent, View view, int position,
long id) {
mAdapter.sortList (position);
}

public void onNothingSelected (AdapterView parent) {
/ / Do nothing
}
}


Reply:
The actual system is to take the data file, the data file system management
Reply:
LZ problem is resolved
Brother is also encountered the same demand

No comments:

Post a Comment