我有一个在后台运行的服务,负责捕捉位置变化和那些东西。
在我的活动中,我需要恢复最后一个位置当我点击一个按钮,就像拍照一样,当我点击发送时我想获取服务上的数据。
我尝试通过广播发送数据,但是没有按预期工作,我按下按钮时尝试访问服务中的方法。
这是我的服务(只是重要代码)
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
我厌倦了这种方式,但它说它必须是静态的另一方面,我无法从静态上下文访问非静态方法,如果我在服务上更改为静态它不会按预期工作。
任何提示?
由于
答案 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();
}
};