Android文件观察器

时间:2017-01-31 22:33:31

标签: android

我创建的应用程序可以检测何时插入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)
        {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

/ sys下的文件不是真实文件,而inotify(FileObserver使用的文件)不适用于它们。如果您使用了ndk,则可以使用poll或select来在设备插入时收到通知。

在更高级别,您可以使用广播接收器接收USB设备https://developer.android.com/guide/topics/connectivity/usb/host.html

的通知