如何在屏幕截图后从 BroadcastReceiver 更新 UI
How to update UI from BroadcastReceiver after screenshot
主要问题:出现截图后需要更新UI
我尝试在 MainActivity.java 的 onResume() 中以编程方式创建 BroadcastReceiver,但由于某种原因它没有获取屏幕截图。
因此,我尝试了在 Manifest 中声明的 BroadcastReceiver,它可以正确获取屏幕截图,但我无法更新 UI.
BroadcastReceiver 在 AndroidManifest.xml 中定义为 Activity 的内部 class 必须是静态的,否则我会收到此错误:
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
这是我目前的代码:
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>
BroadcastReceiver class 在 MainActivity:
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");
}
}
因此,我在 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");
行。
主要问题:出现截图后需要更新UI
我尝试在 MainActivity.java 的 onResume() 中以编程方式创建 BroadcastReceiver,但由于某种原因它没有获取屏幕截图。 因此,我尝试了在 Manifest 中声明的 BroadcastReceiver,它可以正确获取屏幕截图,但我无法更新 UI.
BroadcastReceiver 在 AndroidManifest.xml 中定义为 Activity 的内部 class 必须是静态的,否则我会收到此错误:
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
这是我目前的代码:
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>
BroadcastReceiver class 在 MainActivity:
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");
}
}
因此,我在 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");
行。