点击(活动)从服务获得广播

时间:2017-05-26 08:05:28

标签: java android android-studio service broadcastreceiver

我有一个在后台运行的服务,负责捕捉位置变化和那些东西。

在我的活动中,我需要恢复最后一个位置当我点击一个按钮,就像拍照一样,当我点击发送时我想获取服务上的数据。

我尝试通过广播发送数据,但是没有按预期工作,我按下按钮时尝试访问服务中的方法。

这是我的服务(只是重要代码)

private void sendImage(byte[] b) {
        ImageStore.getInstance().setCapturedPhotoData(b);
        GoogleLocation.getBroadcastData("com.myapp.LOCATION_CHANGED");

你们可以看到我有getBroadcast方法,当我按下发送想要捕获数据的图像时我的活动。

活动

BroadcastReceiver receiver;

IntentFilter filter;

MyReceiver reciver;



filter = new IntentFilter("com.myapp.LOCATION_CHANGED");
reciver = new MyReceiver();



public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("receiver","received");
    }
}

广播接收器活动(注册动态)

onCreate(内部活动)

public void onResume() {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.myapp.LOCATION_CHANGED");
        reciver = new MyReceiver();
        registerReceiver(reciver, intentFilter);
    }

    public void onPause() {
        super.onPause();
        if(reciver != null){
            unregisterReceiver(reciver);
            reciver= null;
        }

    }

    public void onStop() {
        super.onPause();
        if(reciver != null){
            unregisterReceiver(receiver);
            reciver = null;
        }

    }

然后我注册并取消注册

spring-retry

我厌倦了这种方式,但它说它必须是静态的另一方面,我无法从静态上下文访问非静态方法,如果我在服务上更改为静态它不会按预期工作。

任何提示?

由于

1 个答案:

答案 0 :(得分:0)

你可以分享你的BroadcastReceiver的代码吗,如果你没有,你必须使用一个。 用这个 -

替换你的getBroadcastData方法
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
        mMessageReceiver, new IntentFilter("LocationUpdates"));

}

活动中的

-

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
    // Get extra data included in the Intent
    String message = intent.getStringExtra("Status");
    Bundle b = intent.getBundleExtra("Location");
    lastKnownLoc = (Location) b.getParcelable("Location");
    //do whatever with lastknownLoc
}

也在活动中 -

 // AJAX call for autocomplete 
 $(document).ready(function(){
  $("#search-box").keyup(function(){
    $.ajax({
    type: "POST",
    url: "readCountry.php",
    data:'keyword='+$(this).val(),
    beforeSend: function(){
        $("#search-box").css("background","#FFF url(LoaderIcon.gif) 
  no-repeat 165px");
    },
    success: function(data){
        $("#suggesstion-box").show();
        $("#suggesstion-box").html(data);
        $("#search-box").css("background","#FFF");
       }
       });
    });
});
//To select country name
function selectCountry(val) {
$("#search-box").val(val);
$("#suggesstion-box").hide();
}

};