在我的清单文件中,我已经声明了接收器.(如下)
<receiver android:name=".OnAlarmReceive" />
Run Code Online (Sandbox Code Playgroud)
但是,一旦我关闭了我的应用程序,我就无法收到警报和通知.显然,从来没有打过OnReceive我的电话Broadcast receiver.
public class OnAlarmReceive extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent arg1)
{
//various stuff
}
}
Run Code Online (Sandbox Code Playgroud)
在MainActivity中,我的警报管理器类如下所示.
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent intent = new Intent("MY_ALARM_NOTIFICATION");
intent.setClass(this, OnAlarmReceive.class);
intent.putExtra("message", message);
PendingIntent pendingIntent = PendingIntent
.getBroadcast(MainActivity.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Calendar timeCal = Calendar.getInstance();
timeCal.set(Calendar.HOUR_OF_DAY, hour);
timeCal.set(Calendar.MINUTE, minutes);
alarmManager.set(AlarmManager.RTC_WAKEUP, timeCal.getTimeInMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
我的表现如下:
<receiver android:name=".OnAlarmReceive">
<intent-filter android:priority="1">
<action android:name="MY_ALARM_NOTIFICATION"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
即使我关闭了我的应用程序,我该怎么做才能收到通知/警报.后台服务?
notifications android broadcastreceiver alarmmanager android-broadcast
我正在使用谷歌推送通知,到目前为止它工作得很好,目前推送通知不起作用,因为 onRegistered 从未启动。我认为问题出在清单中(因为问题是接收者从未被调用),但我不确定
这是我的清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.name.name"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.name.name.permission.C2D_MESSAGE" android:protectionLevel="normal" />
<application
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.name.name.Disclaimer"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> …Run Code Online (Sandbox Code Playgroud) android push-notification google-cloud-messaging android-broadcast
如果您经常(每秒或每半秒)发送一次更新服务,那么使用广播与注册监听器(您创建的接口)的优缺点是否存储在服务中的某种列表中并发送更新那样?
我在考虑内存使用,电池消耗等方面的问题.我知道它有点开放,但是,文档方面并不多,所以它们可以是平等的,但如果有人知道一个明确的答案或有一些输入,将不胜感激.
Android kitkat手机状态广播接收器工作正常.在android lolipop手机状态广播接收器发送多个广播.在Android Lolipop中是否有任何改变.
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
Log.d("PhoneState", state);
}
}
}
<receiver android:name="com.phonestate.PhoneStateBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud) 我是一个相当新的Android开发人员.我注意到的一件事是,当我走近/星巴克店内时,我的Android设备显示以下内容:

题:
我的手机正在连接蓝牙设备,工作正常.它连接并且连接成立.我可以更改方向,在后台安装我的应用程序,我可以关闭应用程序,当我将其重新打开时,它将自动连接.但是从应用程序用户那里我得到一些报告说连接在一段时间后丢失(没有检测到模式).我试图重新创建这个,但没有运气.因此,为了避免此问题,我想在连接丢失时实现自动重新连接到之前选择的设备.
我做了一些研究,可以通过实现一个可以检测到的广播接收器来完成: android.bluetooth.device.action.ACL_DISCONNECTED
我的问题是:
感谢您的回答.
蓝牙服务代码:
public class BluetoothService
{
// Debugging
private static final String TAG = "BluetoothService";
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
// Member fields
private final BluetoothAdapter mAdapter;
private final Handler mHandler;
private final Context mContext;
private ConnectThread mConnectThread;
private ConnectedThread mConnectedThread;
private int mState;
// Constants that indicate the current connection state
public static final int STATE_NONE = 0; // we're doing nothing
public static final int STATE_CONNECTING = 1; // now …Run Code Online (Sandbox Code Playgroud) 为什么OrderedBroadcast在应用程序的调试版本中工作但在发布版本中不工作?我发送以下OrderedBroadcast:
context.sendOrderedBroadcast(sendInt, "xxx.xxxx.permission.API", new BroadcastReceiver() {
@SuppressLint("NewApi")
@Override
public void onReceive(Context receivercontext, Intent intent) {
Bundle results = getResultExtras(true);
if (results.getInt("Result", Activity.RESULT_CANCELED) == Activity.RESULT_OK) {
Log.d("DEBUG", "OK");
} else {
Log.e("DEBUG", "Failed");
}
}
}, null, Activity.RESULT_OK, null, null);
Run Code Online (Sandbox Code Playgroud)
两个应用程序在AndroidManifest.xml文件中都具有相应的权限,接收器声明如下:
<receiver android:name="xxx.xxxx.xxxx.Receiver1"
android:enabled="true"
android:exported="true"
android:permission="xxx.xxxx.permission.API">
<intent-filter>
<action android:name="xxx.xxxx.permission.API.1" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,如果发送器和接收器应用程序都在调试版本中运行,那么一切都运行正常但是如果我在发布模式下运行接收器应用程序(没有proguard或任何东西),发送者应用程序只是获得RESULT_CANCELLED结果?
这已经困扰了我好几天,所以任何想法都会非常感激.
android broadcastreceiver android-intent android-broadcast android-studio
我有以下情况:一个主要应用程序是启动器应用程序(A),应用程序始终运行,此应用程序调用另一个子应用程序(B)图1.当应用程序(A)启动intent service并且应用程序(B)使用此意图时(图2),会出现问题.
这是用于启动意向服务的代码:
服务
intentCodeRead.putExtra(BARCODE_TEXT, readStr);
intentCodeRead.putExtra(BARCODE_DATE, System.currentTimeMillis());
intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intentCodeRead);
Run Code Online (Sandbox Code Playgroud)
编辑1
在应用程序(A)(启动器应用程序)中,我有intentService一个broadcast用于另一个应用程序.的应用(B)是听这个广播的应用程序.当(A)进行广播时,应用程序(B)然后收听.问题是(A)在(A)做广播时带到(B)的前面.如何在不更改应用程序演示顺序的情况下进行更改?broadcast
编辑2
申请A.
BarcodeScannerService.java
intentCodeRead.putExtra(Constants.BARCODE_TEXT, readStr);
intentCodeRead.putExtra(Constants.BARCODE_DATE, System.currentTimeMillis());
intentCodeRead.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
sendBroadcast(intentCodeRead);
Run Code Online (Sandbox Code Playgroud)
initservice.java
Intent intentService = new Intent(context, BarcodeScannerService.class);
context.startService(intentService);
Run Code Online (Sandbox Code Playgroud)
申请B.
receive.java
BroadcastReceiver actionBarcodeScannerAndPresenceReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
/* Receiver for the barcode scan and presence sensor …Run Code Online (Sandbox Code Playgroud) 我正在使用 Android Room 来存储我的应用程序数据。设备重新启动后,我需要检索它们并执行一些功能。我正在使用 LiveData 从数据库获取数据。但我无法将广播接收器绑定为所有者。我应该如何解决这个问题?
public class BootReciever extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if (context != null) {
ProductUIRepository mRepository = new ProductUIRepository(context.getApplicationContext());
mRepository.findAllProducts().observe(this, new android.arch.lifecycle.Observer<List<ProductUI>>() {
@Override
public void onChanged(@Nullable List<ProductUI> productUIS) {
NotificationMan.setAlarmForProducts(context, productUIS);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用“this”会使应用程序无法编译。
我的应用程序不使用广播 - 既不使用Context也不使用LocalBroadcastManager. 由于我在应用程序源代码中使用了一些外部库,因此其中一个可能在其中使用广播。
我可以android.app.RemoteServiceException: can't deliver broadcast在 Crashlytics 和 Google Play 控制台中看到很多异常的发生,但我不知道是什么导致了它们。
完整的日志可以在下面找到:
Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6123)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
Run Code Online (Sandbox Code Playgroud)
我已经看到了一些与此错误相关的其他 StackOverflow 问题,例如 this one,但所有这些问题都通过sendBroadcast()逻辑更改解决了。由于我的应用程序不发送广播,这对我没有帮助。
有人知道导致问题的原因是什么吗?谢谢!