Доброе утро, ребята!
Я портирую настольное приложение OpenGL c ++ на Android. Это приложение уже довольно кроссплатформенное. Он требует надежного рендеринга на всех платформах, поэтому учитывает различия в реализациях графических драйверов, включая или отключая определенные пути кода на основе ОС хоста и информации PCI карты. В частности, он переключает идентификаторы устройства, поставщика и редакции.
Мне нужно получить эти идентификаторы PCI из Android.
Я бы предпочел сделать это программно из собственного кода, но разумными альтернативами являются путь JNI или даже анализ внешней команды.
Я искал вокруг, но я не могу найти ничего надежного. Любой поиск в Google, который я могу предложить с использованием Android и PCI или идентификатора, даже с тонной фильтрацией, возвращает идентификатор устройства Android, базу данных или список всех известных идентификаторов устройств PCI или Совет по стандартам безопасности PCI. Ничего об актуальных заголовках PCI. Может мне просто нужно больше гугл-фу?
На Android нет lspci. Просматривая в оболочке adb, я вижу, что нет доступной файловой системы / sys и / proc / bus / pci / devices пуст. Самым близким, что я видел, является / proc / device-tree / nvidia-boardids на Tegra, который печатает довольно загадочную строку, которая, я уверен, содержит эти идентификаторы. Это, вероятно, будет работать для устройств, которые имеют его, но это только подмножество устройств, использующих карты nVidia.
В качестве последнего средства мы, вероятно, можем использовать информацию, полученную из glGetString, но она значительно отличается от идентификаторов PCI. Я бы предпочел избежать этого маршрута.
Это приложение предназначено для распространения в Google Play, поэтому я абсолютно не могу рутировать эти устройства.
Есть идеи?
Спасибо!
Вот класс Java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.CellInfo;
import android.telephony.CellInfoLte;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Window;
import android.widget.TextView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
phoneStateListener listener;
TelephonyManager telephonyManager;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
listener = new phoneStateListener();
telephonyManager.listen(listener,PhoneStateListener.LISTEN_CELL_INFO);
tv = (TextView) findViewById(R.id.tv);
}
@Override
protected void onResume() {
super.onResume();
}
public class phoneStateListener extends PhoneStateListener{
public phoneStateListener(){
}
@Override
public void onCellInfoChanged(List<CellInfo> cellInfo) {
super.onCellInfoChanged(cellInfo);
for(CellInfo m: cellInfo)
if (m instanceof CellInfoLte){
CellInfoLte cellInfoLte=(CellInfoLte) m;
int pciNum = cellInfoLte.getCellIdentity().getPci();
Log.d("onCellInfoChanged", "CellInfoLte--" + m);
tv.setText("PCINUMBER: "+pciNum);
}
}
}
@Override
protected void onStop() {
super.onStop();
telephonyManager = null;
}
}
Не забудьте использовать разрешение
android.permission.READ_PHONE_STATE
android.permission.ACCESS_COARSE_LOCATION