2017-09-20 36 views
-2

enter code here BackgroundService-当使用浮动泡泡作为背景服务来拍摄实时屏幕截图时。获得两个错误

private void addNewBubble()//ERROR , Expression expected and Missing ';' token{ 


     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();// ERROR 
       } 
      }) 
      .build(); 
    bubblesManager.initialize(); 
} 

}

这是OnStart方法,其包括所有的方法来创建浮动泡沫,并使其可点击获取屏幕截图。只有addNewBubble显示错误,而当在MainActivity上运行Floating Bubble代码而不创建BackgroundService时,它运行良好,没有任何错误。 关于该怎么做的任何建议?在UiThread

runOnUiThread(new Runnable() { 
     public void run() { 
     addNewBubble() 
     } 
    }); 

这样

+0

我是新来的StackOverflow,请帮助我。我在这里检查,似乎无法找到类似的错误。 – Yohanelly

+2

可能的重复[安卓权限拒绝2010年在棉花糖或更高的窗口类型](https://stackoverflow.com/questions/37982167/android-permission-denied-for-window-type-2010-in-marshmallow-or-更高) – ventiseis

+0

是的,我读过这个,错误是类似的。但我的代码是完全不同的,我已经使用编译'com.txusballesteros:bubbles:1.2.1' – Yohanelly

回答

0

复制粘贴此代码。我已经测试过它

import android.content.Intent; 
    import android.graphics.PixelFormat; 
    import android.net.Uri; 
    import android.os.Build; 
    import android.os.Bundle; 

    import android.provider.Settings; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.view.WindowManager; 
    import android.widget.Toast; 

    import com.txusballesteros.bubbles.BubbleLayout; 
    import com.txusballesteros.bubbles.BubblesManager; 
    import com.txusballesteros.bubbles.OnInitializedCallback; 
    /** 
    * Created by yohanson on 20/09/17. 
    */ 

    public class MainActivity extends AppCompatActivity { 

     private BubblesManager bubblesManager; 
     private WindowManager windowManager; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


      findViewById(R.id.add).setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        checkDrawOverlayPermission(); 


       } 
      }); 
     } 


public void checkDrawOverlayPermission() { 
    /** check if we already have permission to draw over other apps */ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     if (!Settings.canDrawOverlays(this)) { 
      /** if not construct intent to request permission */ 
      Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
        Uri.parse("package:" + getPackageName())); 
      /** request permission via start activity for result */ 
      startActivityForResult(intent, 2); 
     } 
     else 
     { 
      initializeBubblesManager(); 
      addNewBubble(); 

     } 
    } 
} 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      /** check if received result code 
      is equal our requested code for draw permission */ 
      if (requestCode == 2) { 
       initializeBubblesManager(); 
       addNewBubble(); 

      } 
     } 

     private void addNewBubble() { 


      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(MainActivity.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) { 
        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(); 
         } 
        }) 
        .build(); 
      bubblesManager.initialize(); 
     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      bubblesManager.recycle(); 
     } 
    } 
+0

非常感谢你,现在应用程序打开。虽然,我第一次打开它,但它完美运行。我关闭了应用程序并再次运行它。应用程序打开,但添加泡泡按钮不会再次创建泡泡。当你运行它时会发生这种情况吗? – Yohanelly

+0

我忘了做checkDrawOverlayPermission()中的else部分,我编辑了代码..只是检查它 – Saneesh

+0

所以我使用了另一个模拟器。我意识到,这是自应用程序第一次请求许可时第一次开始。然后创建泡泡。但是,第二次打开应用程序时,它不会询问权限,因此应用程序将打开,但添加泡泡按钮不会创建新泡泡。任何方式在这个? – Yohanelly

0

呼叫addNewBubble()函数。

+0

好的,先生,我会这样做的。但是在我的MainActivity.java的哪个部分输入这段代码? – Yohanelly

+0

findViewById(R.id.add).setOnClickListener(新View.OnClickListener(){ @覆盖 公共无效的onClick(视图v){ runOnUiThread(新的Runnable(){ 公共无效的run(){ addNewBubble() } }); } }); – Saneesh

+0

非常感谢你,我会更新我的应用程序并让你知道。我目前正在下载一个sdk,一旦完成就会更新你。 – Yohanelly