屏幕截图后从 BroadcastReceiver 更新 UI

问题描述 投票:0回答:1

截图发生后我需要更新UI。

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

在 AndroidManifest.xml 中定义为 Activity 内部类的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

如果我尝试在 MyReceiver 内部使用 findViewById(),则会收到错误:

Non-static method 'findViewById(int)' cannot be referenced from a static context

这是我目前拥有的代码:

AndroidManifest.xml 中声明的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>

MainActivity 中的BroadcastReceiver 类:

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");
    }
}
java android broadcastreceiver screenshot
1个回答
0
投票

所以,事实证明我在尝试以编程方式在 MainActivity.java 的 onResume() 中创建 BroadcastReceiver 时忘记了一部分。

这是完整的工作代码:

    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("file");
线。

© www.soinside.com 2019 - 2024. All rights reserved.