Java 屏幕截图后如何从BroadcastReceiver更新UI

Java 屏幕截图后如何从BroadcastReceiver更新UI,java,android,broadcastreceiver,screenshot,Java,Android,Broadcastreceiver,Screenshot,主要问题:出现屏幕截图后,我需要更新UI。 我尝试在MainActivity.java的onResume()中以编程方式创建一个BroadcastReceiver,但由于某些原因,它无法获取屏幕截图。 因此,我尝试了清单中声明的BroadcastReceiver,它正确地拾取了屏幕截图,但我无法更新UI AndroidManifest.xml中定义为活动内部类的BroadcastReceiver必须是静态的,否则我会收到以下错误: java.lang.RuntimeException: Unab

主要问题:出现屏幕截图后,我需要更新UI。

我尝试在MainActivity.java的onResume()中以编程方式创建一个BroadcastReceiver,但由于某些原因,它无法获取屏幕截图。 因此,我尝试了清单中声明的BroadcastReceiver,它正确地拾取了屏幕截图,但我无法更新UI

AndroidManifest.xml中定义为活动内部类的BroadcastReceiver必须是静态的,否则我会收到以下错误:

java.lang.RuntimeException: Unable to instantiate receiver com.patmyron.blackbox.MainActivity$MyReceiver: java.lang.InstantiationException: java.lang.Class<com.patmyron.blackbox.MainActivity$MyReceiver> has no zero argument constructor
以下是我目前拥有的代码:

    <receiver android:name=".MainActivity$MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
            <data android:scheme="file" />
        </intent-filter>
    </receiver>
public static class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("this works", "SCREENSHOT");
        // ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
    }
}
    BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            Log.e("this works", "SCREENSHOT");
            ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
        }
    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    filter.addDataScheme("file");
    registerReceiver(receiver, filter);
BroadcastReceiver在AndroidManifest.xml中声明:

    <receiver android:name=".MainActivity$MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
            <data android:scheme="file" />
        </intent-filter>
    </receiver>
public static class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("this works", "SCREENSHOT");
        // ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
    }
}
    BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            Log.e("this works", "SCREENSHOT");
            ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
        }
    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    filter.addDataScheme("file");
    registerReceiver(receiver, filter);

因此,在MainActivity.java的onResume()中尝试以编程方式创建BroadcastReceiver时,我忘记了一部分

以下是完整的工作代码:

    <receiver android:name=".MainActivity$MyReceiver" >
        <intent-filter>
            <action android:name="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
            <data android:scheme="file" />
        </intent-filter>
    </receiver>
public static class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("this works", "SCREENSHOT");
        // ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
    }
}
    BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            Log.e("this works", "SCREENSHOT");
            ((TextView) findViewById(R.id.tv13)).setText("SCREENSHOT");
        }
    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    filter.addDataScheme("file");
    registerReceiver(receiver, filter);
我只是缺少了
filter.addDataScheme(“文件”)