android - 广播接收器没有被触发
问题描述
您好我正在尝试创建一个服务,该服务将在位置更改时触发广播接收器。但由于某种原因,我的广播接收器没有被触发。我已经为位置添加了必要的权限。任何帮助将不胜感激。我正在我的主要活动中启动服务。在我的广播接收器中,我正在重新启动服务,以便我的应用程序将不断向服务器发送位置更新。
我的广播接收器类:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// updateLocationServer();
Intent intent1 = new Intent(context,LocationService.class);
Log.i("in broadcast","in");
String latitude = intent1.getStringExtra("latitude");
String longitude = intent1.getStringExtra("longitude");
Log.i("lat",latitude);
Log.i("lat",longitude);
updateLocationServer(latitude,longitude);
context.startService(intent1);
}
我的服务等级:
public class LocationService extends Service
{
public static final String BROADCAST_ACTION = "Hello World";
private static final int TWO_MINUTES = 1000 * 60 * 2;
public LocationManager locationManager;
public MyLocationListener listener;
public Location previousBestLocation = null;
Intent intent;
int counter = 0;
@Override
public void onCreate()
{
super.onCreate();
intent = new Intent(BROADCAST_ACTION);
}
@SuppressLint("MissingPermission")
@Override
public void onStart(Intent intent, int startId)
{
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
listener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 20000, 0, listener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 20000, 0, listener);
}
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@SuppressLint("MissingPermission")
@Override
public void onDestroy() {
// handler.removeCallbacks(sendUpdatesToUI);
super.onDestroy();
Log.v("STOP_SERVICE", "DONE");
locationManager.removeUpdates(listener);
}
public static Thread performOnBackgroundThread(final Runnable runnable) {
final Thread t = new Thread() {
@Override
public void run() {
try {
runnable.run();
} finally {
}
}
};
t.start();
return t;
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(final Location loc) {
Log.i("lat1", String.valueOf(loc.getLatitude()));
Log.i("lat2", String.valueOf(loc.getLongitude()));
intent.putExtra("Latitude", loc.getLatitude());
intent.putExtra("Longitude", loc.getLongitude());
sendBroadcast(intent);
}
public void onProviderDisabled(String provider)
{
}
public void onProviderEnabled(String provider)
{
}
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
}
清单中的静态注册:
<receiver android:name=".helper.MyBroadcastReceiver"
>
<intent-filter>
<action android:name="android.intent.action.Hello World" >
</action>
</intent-filter>
</receiver>
解决方案
首先在清单中
<action android:name="android.intent.action.Hello World" >
行更改为
<action android:name="android.intent.action.HelloWorld" >
在我的服务课之后
public static final String BROADCAST_ACTION = "Hello World";
到
public static final String BROADCAST_ACTION = "android.intent.action.HelloWorld";
推荐阅读
- reactjs - Material-UI 文件上传按钮
- php - Laravel 与 websockets 实时聊天
- python - 如何使用 xpath 在类中查找值?(硒 Chrome 驱动程序)
- url - page.click 不是函数
- python - 无法编组响应:JSONDecodeError
- python - Python AZ translate 请求未授权,因为凭据丢失或无效
- twitter-bootstrap - Bootstrap 4 折叠,在内容之间切换,不关闭所选内容
- q# - 如何从 QDK 全态模拟器返回测量概率?
- html - 为什么我的 html 标签的高度是 8px?
- php - 让它不只返回 1 个值