2015-02-18 3 views
1

Утро, люди!Как получить информацию о дисплее на устройстве Android на Android

Я портирую настольное приложение OpenGL C++ для Android. Это приложение уже довольно кросс-платформенное. Он требует надежного рендеринга на всех платформах, поэтому он учитывает различия в реализации графических драйверов, позволяя или отключая определенные пути кода на основе ОС хоста и данных PCI на карте. В частности, он переключает идентификаторы устройства, поставщика и ревизии.

Мне нужно получить эти идентификаторы PCI из Android.

Я бы предпочел сделать это программно из собственного кода, но путь JNI или даже синтаксический вывод внешней команды являются разумными альтернативами.

Я искал вокруг, но я не могу найти ничего надежного. Любой поиск в Google, с которым я могу столкнуться, включает Android и PCI или ID, даже с тонкой фильтрацией, возвращает идентификатор Android-устройства, базу данных или список всех известных идентификаторов устройств PCI или Совет стандартов безопасности PCI. Ничего о фактических PCI-заголовках. Может быть, мне просто нужно больше google-fu?

На Android нет lspci. Я вижу, что в adb-оболочке нет доступной файловой системы/sys и/proc/bus/pci/devices пуст. Самый близкий, который я видел, это/proc/device-tree/nvidia-boardids на Tegra, который печатает довольно загадочную строку, в которой я уверен, содержит эти идентификаторы. Это, вероятно, будет работать на устройствах, которые имеют это, но это только подмножество устройств, на которых работают карты nVidia.

В качестве последнего средства мы, вероятно, можем использовать информацию, которая возвращается из glGetString, но это намного больше, чем идентификаторы PCI. Я бы предпочел избежать этого маршрута.

Это приложение предназначено для распространения в Google Play, поэтому я абсолютно не могу укрепить эти устройства.

Любые идеи?

Спасибо!

ответ

1

Вот класс 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

+0

дает мне следующую ошибку во время выполнения: ' FATAL EXCEPTION: main Процесс: com.example.me.antennas, PID: 21831 java.lang.NullPointerException: попытка вызвать interfac e method 'java.util.Iterator java.util.List.iterator()' в ссылке нулевого объекта' в 'for (CellInfo m: cellInfo)'. – JohnnyFromBF

Смежные вопросы