我试图发现,给我发了意图进程的进程ID或包名称。 我不想把进程ID或包的名称出现在酒店,(其它一些问题都问),因为我不想让欺骗。 我使用的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secure_file_share);
...
Intent intent = getIntent();
if (intent != null)
{
// get the caller
String callingPackage = getAppNameByPID(getApplicationContext(),
Binder.getCallingPid());
....
}
}
凡getAppNameByPID
转换的PID的包名。 问题是, Binder.getCallingPid()
总是返回收件人的PID(不是调用程序的)。
你如何让来电者的PID?
看一眼
http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
我想这是很好,我只能用绑定的服务,得到一个结果。
@Override
public IBinder onBind(Intent intent) {
@SuppressWarnings("static-access")
int uid = mBinder.getCallingUid();
final PackageManager pm = getPackageManager();
String name = pm.getNameForUid(uid);
Log.d("ITestService", String.format("onBind: calling name: %s"), name);
//name is your own package, not the caller
return mBinder;
}
但是,如果你实现你的AIDL的存根:
private final ITestService.Stub mBinder = new ITestService.Stub() {
public void test() {
//Get caller information
//UID
int uid = Binder.getCallingUid();
final PackageManager pm = getPackageManager();
String name = pm.getNameForUid(uid);
//name will be sharedUserId of caller, OR if not set the package name of the caller
String[] packageNames = pm.getPackagesForUid(uid);
//packageNames is a array of packages using that UID, could be more than 1 if using sharedUserIds
Log.d("ITestService", String.format("Calling uid: %d (getNameForUid: %s)", uid, name));
for (String packageName : packageNames) {
Log.d("ITestService", String.format("getPackagesForUid: %s", packageName));
}
//PID
int pid = Binder.getCallingPid();
Log.d("ITestService", String.format("Calling pid: %d", pid));
String processName = "";
ActivityManager am = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
List<ActivityManager.RunningAppProcessInfo> processes = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo proc : processes) {
if (proc.pid == pid) {
processName = proc.processName;
Log.d("ITestService", String.format("Found ProcessName of pid(%d): %s", pid, processName));
//processName will be the package name of the caller, YEAH!
}
}
}
}
PID将是,如果你想知道哪些包把它称为最可靠的一个。