标签: android-broadcast

当应用程序未运行时,BroadcastReceiver无法正常工作

在我的清单文件中,我已经声明了接收器.(如下)

<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

6
推荐指数
1
解决办法
8858
查看次数

推送通知接收器 android(清单?)

我正在使用谷歌推送通知,到目前为止它工作得很好,目前推送通知不起作用,因为 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

6
推荐指数
1
解决办法
2万
查看次数

android broadcastreceiver vs听众

如果您经常(每秒或每半秒)发送一次更新服务,那么使用广播与注册监听器(您创建的接口)的优缺点是否存储在服务中的某种列表中并发送更新那样?

我在考虑内存使用,电池消耗等方面的问题.我知道它有点开放,但是,文档方面并不多,所以它们可以是平等的,但如果有人知道一个明确的答案或有一些输入,将不胜感激.

android android-service android-broadcast

6
推荐指数
1
解决办法
3291
查看次数

Android Lollipop发送多个BroadcastReceivers用于电话状态更改

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-broadcast

6
推荐指数
1
解决办法
666
查看次数

星巴克在附近商店时如何在Android设备上显示用户界面?

我是一个相当新的Android开发人员.我注意到的一件事是,当我走近/星巴克店内时,我的Android设备显示以下内容:

在此输入图像描述

题:

  1. 当我在商店附近/内部时,这个UI如何自动呈现在我的移动设备上?
  2. 此UI是否显示是因为我的手机上安装了星巴克应用程序?该应用程序是否使用网络广播监听器?例如:如果在该区域检测到"Google Starbucks"Wi-Fi,该应用程序是否会将UI显示为活动?
  3. 或者,星巴克路由器是否向移动设备广播特殊网络数据包以强制移动设备呈现此信息?如果是这样,这个网络数据包里面有什么?我也想这样做.

android android-networking android-broadcast

6
推荐指数
1
解决办法
264
查看次数

如果连接丢失,Android将重新连接到蓝牙设备

我的手机正在连接蓝牙设备,工作正常.它连接并且连接成立.我可以更改方向,在后台安装我的应用程序,我可以关闭应用程序,当我将其重新打开时,它将自动连接.但是从应用程序用户那里我得到一些报告说连接在一段时间后丢失(没有检测到模式).我试图重新创建这个,但没有运气.因此,为了避免此问题,我想在连接丢失时实现自动重新连接到之前选择的设备.

我做了一些研究,可以通过实现一个可以检测到的广播接收器来完成: android.bluetooth.device.action.ACL_DISCONNECTED

我的问题是:

  • 我已经有一个在设备启动时触发的广播接收器.我是否应该扩展此接收器以添加ACL_DISCONNECTED或添加单独的接收器?
  • 我的BluetoothService初始化我的mainactivity,但我需要重新连接intent.怎么做.

感谢您的回答.

蓝牙服务代码:

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)

java android bluetooth android-broadcast android-bluetooth

6
推荐指数
1
解决办法
9266
查看次数

Android OrderedBroadcast在Release Build中不起作用

为什么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

6
推荐指数
1
解决办法
689
查看次数

意图服务启动后,防止更改应用程序演示Android的顺序

我有以下情况:一个主要应用程序是启动器应用程序(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调用应用程序B.

图2应用B用A改变上下文

编辑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 android-intent intentservice android-broadcast

6
推荐指数
1
解决办法
285
查看次数

广播接收器中的 LifeCycleOwner

我正在使用 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”会使应用程序无法编译。

android android-broadcast android-broadcastreceiver

6
推荐指数
0
解决办法
508
查看次数

android.app.RemoteServiceException“无法提供广播”

我的应用程序不使用广播 - 既不使用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()逻辑更改解决了。由于我的应用程序不发送广播,这对我没有帮助。

有人知道导致问题的原因是什么吗?谢谢!

android exception broadcastreceiver android-broadcast

6
推荐指数
0
解决办法
2192
查看次数