2017-06-10 58 views
1

主要問題:我需要在屏幕截圖發生後更新UI。如何從截圖後的BroadcastReceiver更新UI

我試着以編程方式在MainActivity.java的onResume()中創建一個BroadcastReceiver,並且由於某種原因它沒有截取屏幕截圖。 因此,我嘗試了在清單中聲明的​​BroadcastReceiver,它正確地截取了屏幕截圖,但我無法更新UI。在AndroidManifest.xml中定義爲內部類活動的

廣播接收器必須是靜態還是我得到這個錯誤:

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 

如果我嘗試使用findViewById()MyReceiver內,我得到的錯誤:

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

下面是代碼我目前:

廣播接收器在AndroidManifest.xml中聲明:中MainActivity

<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"); 
    } 
} 

回答

0

所以,原來我忘了部分試圖以編程方式創建的onResume一個BroadcastReceiver(當)在MainActivity.java中。

以下是完整的工作代碼:

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");線。