如何在BroadcastReceiver类中使用findViewbyId

时间:2017-01-24 18:08:07

标签: java android android-studio

我正在尝试在我的BroadCastReceiver类中的方法中使用imageview,但它给了我错误"无法解析findViewbyid"因为我不能在mainactivity之外使用findViewbyId。任何想法我如何使用" findViewbyId"在这个方法" onButtonSingleOrDoubleClickOrHold"。我基本上需要在调用此方法时更改imageview的颜色。

以下是我的BroadCastReceiver类

        mHandler = new Handler(){
        public void handleMessage(android.os.Message msg){
            if(msg.what == MESSAGE_READ){
                try {
                    byte[] readBuf = (byte[]) msg.obj;
                    byte[] bytes = (msg.obj).toString().getBytes();

                    mReadBuffer.setText(readBuf.toString());
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                }

            }

            if(msg.what == CONNECTING_STATUS){
                if(msg.arg1 == 1)
                    mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
                else
                    mBluetoothStatus.setText("Connection Failed");
            }
        }
    };

我的主要活动

 public class MyBroadcastReceiver extends FlicBroadcastReceiver {

@Override
protected void onRequestAppCredentials(Context context) {
    // Set app credentials
}

@Override
public void onButtonSingleOrDoubleClickOrHold(Context context, FlicButton button, boolean wasQueued, int timeDiff, boolean isSingleClick, boolean isDoubleClick, boolean isHold) {

    if(isSingleClick) {
       ImageView blueImage = (ImageView) findViewById(R.id.imageView);
       blueImage.setColorFilter(0xff000000);
       }

3 个答案:

答案 0 :(得分:1)

您可以尝试在onButtonSingleOrDoubleClickOrHold

中手动将上下文转换为活动
if(context == null || !(context instanceof MainActivity))
    return;

AppCompatActivity yourActivity = (AppCompatActivity) context;
ImageView blueImage = (ImageView) yourActivity.findViewById(R.id.imageView);

答案 1 :(得分:0)

您可以在ImageView中添加对ActivityMyBroadcastReceiver的引用。您可以在实例化MyBroadcastReceiver时将其设置为通过构造函数所需的内容,因此当您需要对已经拥有它的内容进行操作时,MyBroadcastReceiver

您可以决定是否通过Activity,然后通知您的ImageView或直接通过您的ImageView

另一种方法是将您的MyBroadcastReceiver声明为活动的内部或匿名类,以便您可以直接访问主要活动的变量

答案 2 :(得分:-1)

您可以决定在MainActivity中制作静态Activity对象,并从BroadcastReceiver调用它。这不是一个好习惯,因为它可能会导致内存泄漏。但是,如果您真的想将方法保留在BroadcastReceiver中:

public class MainActivity extends AppCompatActivity {

   public static MainActivity instance = null;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       this.instance = this;
   }
}

然后致电:

ImageView blueImage = (ImageView) MainActivity.instance.findViewById(R.id.imageView);

我建议你重新考虑一下你的代码设计,并将改变颜色的功能移到你的活动中,然后从BroadcastReceiver调用该方法。