2017-09-23 61 views
0

這在背景Service.java代碼含有onStart()方法 -如何運行的浮動泡沫作爲後臺服務,把所有的氣泡代碼OnStart方法內

@Override 
public void onStart(Intent intent, int startid) { 
    //Toast.makeText(this, "Service started by user.", Toast.LENGTH_LONG).show(); 

    private void addNewBubble() // Error here , says missing token ';' and Expression Expected 

    { 
     windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     //here is all the science of params 
     final WindowManager.LayoutParams myParams = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, 
       WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
         | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
         | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
       PixelFormat.TRANSLUCENT 
     ); 
     BubbleLayout bubbleView = (BubbleLayout) LayoutInflater.from(BackgroundService.this).inflate(R.layout.bubble_layout, null); 
     bubbleView.setLayoutParams(myParams); 

     bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() { 
      @Override 
      public void onBubbleRemoved(BubbleLayout bubble) { 
      } 
     }); 
     bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() { 

      @Override 
      public void onBubbleClick(BubbleLayout bubble) { 


       Bitmap b = Screenshot.takescreenshotOfRootView(imageView); 
       imageView.setImageBitmap(b); 
       main.setBackgroundColor(Color.parseColor("#999999")); 

       //Toast.makeText(getApplicationContext(), "Clicked !", 
       // Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     bubbleView.setShouldStickToWall(true); 
     bubblesManager.addBubble(bubbleView, 60, 20); 
    } 
} 

private void initializeBubblesManager() { 
    bubblesManager = new BubblesManager.Builder(this) 
      .setTrashLayout(R.layout.bubble_trash_layout) 
      .setInitializationCallback(new OnInitializedCallback() { 
       @Override 
       public void onInitialized() { 
        addNewBubble(); // Cannot resolve this method 
       } 
      }) 
      .build(); 
    bubblesManager.initialize(); 
} 

在MainActivity只包含權限代碼使用checkDrawOverlay()方法,使用 startService(new Intent(this,BackgroundService.class))運行浮動氣泡; 在其他部分....

+0

我正在嘗試運行浮動氣泡,以便在使用手機上的任何其他應用程序時可以拍攝屏幕截圖。這就是我試圖實施後臺服務的原因。 https://github.com/yohanelly/Floating-Bubble-Live-Screenshots – Yohanelly

+0

我認爲這意味着它不是一個有效的代碼格式。仔細查看方法的起始和結束位置。 – n247s

+0

我將整個浮動氣泡代碼放入onStart()方法中,只有addNewBubble方法會給出錯誤。另外,要創建一個後臺服務,我不需要創建一個全新的空白活動嗎? – Yohanelly

回答

0

您有一個無效的代碼格式這就是爲什麼你的IDE抱怨缺少分號(;)。與句子;

「採取在其中該方法開始和結束仔細看」

我的意思是你需要注意的地方,你聲明的方法,因爲它們可能只在範圍聲明類聲明。目前您正在另一個方法的範圍內聲明一個方法(無效)。例如

public void methodOne() 
{ 
    // this nested method declaration is considerd invalid 
    private void methodTwo() 
    { 
     // method content 
    } 
} 

修復它簡單地做

public void methodOne() 
{ 
    // call other method if you need it to be executed here 
    methodTwo(); 
} 

private void methodTwo() 
{ 
    // method content 
} 

這會照顧missing semicolon errorcannot resolve method error兩者。

+0

謝謝你。錯誤已經消失,現在沒有錯誤。雖然當我運行該應用程序,並點擊添加氣泡按鈕。浮動泡沫根本不會被創建。我檢查了Android監視器,顯示沒有錯誤。這是爲什麼?我是否需要爲BackgroundService.java創建單獨的空白活動? – Yohanelly

+0

嘿所以我想通了。儘管我有一個問題,要截取用戶的當前活動,您是否必須只使用MediaProjection?或者有另一種使用DrawingCache的方法。我已經創建了一個浮動泡泡,我希望能夠截取用戶正在進行的當前活動。有什麼建議麼? – Yohanelly