我创建的应用程序可以检测何时插入otg电缆或者使用fileobserver插入电缆但由于某种原因它无法正常工作! 为什么应用程序不起作用?
应用源代码:
MainActivity.class
public class MainActivity extends AppCompatActivity
{
private Process suProcess;
private static int conn_length = -1;
File directory = new File("/sys/bus/usb/devices");
File[] contents = directory.listFiles();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getRoot();
FileObserver observer = new FileObserver("/sys/bus/usb/devices")
{
@Override
public void onEvent(int event, String file)
{
if(contents.length == conn_length){
return;
}
else{
conn_length = contents.length;
}
if(conn_length == 0)
{
Toast.makeText(MainActivity.this,"otg not connected",Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this,"otg connected",Toast.LENGTH_SHORT).show();
}
}
};
observer.startWatching();
}
private void getRoot()
{
try
{
suProcess = Runtime.getRuntime().exec("su");
}
catch (IOException e)
{
}
}
}
答案 0 :(得分:0)
/ sys下的文件不是真实文件,而inotify(FileObserver使用的文件)不适用于它们。如果您使用了ndk,则可以使用poll或select来在设备插入时收到通知。
在更高级别,您可以使用广播接收器接收USB设备https://developer.android.com/guide/topics/connectivity/usb/host.html
的通知