[MS30] Remove ServiceManager#getService dependency
Since TrafficStats is moving into the mainline module, ServiceManager#getService can no longer be accessed. This change use reflection to access getService, since there is no offical way to get the service binder, and TrafficStats is a static utility that doesn't have the context to invoke Context#getSystemService. This change also fixes minor lint errors. Test: atest CtsNetTestCases:TrafficStatsTest Bug: 204830222 Change-Id: I5caec42a71431b39f747fc791b8511d92e5cf7cc
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package android.net;
|
package android.net;
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.annotation.TestApi;
|
import android.annotation.TestApi;
|
||||||
@@ -27,8 +28,8 @@ import android.compat.annotation.UnsupportedAppUsage;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.os.IBinder;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ServiceManager;
|
|
||||||
|
|
||||||
import com.android.server.NetworkManagementSocketTagger;
|
import com.android.server.NetworkManagementSocketTagger;
|
||||||
|
|
||||||
@@ -36,6 +37,8 @@ import dalvik.system.SocketTagger;
|
|||||||
|
|
||||||
import java.io.FileDescriptor;
|
import java.io.FileDescriptor;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
@@ -53,6 +56,7 @@ import java.net.SocketException;
|
|||||||
* use {@link NetworkStatsManager} instead.
|
* use {@link NetworkStatsManager} instead.
|
||||||
*/
|
*/
|
||||||
public class TrafficStats {
|
public class TrafficStats {
|
||||||
|
private static final String TAG = TrafficStats.class.getSimpleName();
|
||||||
/**
|
/**
|
||||||
* The return value to indicate that the device does not support the statistic.
|
* The return value to indicate that the device does not support the statistic.
|
||||||
*/
|
*/
|
||||||
@@ -173,12 +177,25 @@ public class TrafficStats {
|
|||||||
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 130143562)
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 130143562)
|
||||||
private synchronized static INetworkStatsService getStatsService() {
|
private synchronized static INetworkStatsService getStatsService() {
|
||||||
if (sStatsService == null) {
|
if (sStatsService == null) {
|
||||||
sStatsService = INetworkStatsService.Stub.asInterface(
|
sStatsService = getStatsBinder();
|
||||||
ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
|
|
||||||
}
|
}
|
||||||
return sStatsService;
|
return sStatsService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private static INetworkStatsService getStatsBinder() {
|
||||||
|
try {
|
||||||
|
final Method getServiceMethod = Class.forName("android.os.ServiceManager")
|
||||||
|
.getDeclaredMethod("getService", new Class[]{String.class});
|
||||||
|
final IBinder binder = (IBinder) getServiceMethod.invoke(
|
||||||
|
null, Context.NETWORK_STATS_SERVICE);
|
||||||
|
return INetworkStatsService.Stub.asInterface(binder);
|
||||||
|
} catch (NoSuchMethodException | ClassNotFoundException | IllegalAccessException
|
||||||
|
| InvocationTargetException e) {
|
||||||
|
throw new NullPointerException("Cannot get INetworkStatsService: " + e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Snapshot of {@link NetworkStats} when the currently active profiling
|
* Snapshot of {@link NetworkStats} when the currently active profiling
|
||||||
* session started, or {@code null} if no session active.
|
* session started, or {@code null} if no session active.
|
||||||
|
|||||||
Reference in New Issue
Block a user