Articles of android broadcastreceiver

在Play商店中正确跟踪安装推介

我有一个简单的任务:我想跟踪应用安装的引用ID并将其传递给后端。 我做了什么:我创建了一个带有额外参数referrer的链接,并将其附加到邀请链接。 当它打开时, javascript会检测浏览器是否是Android移动浏览器,然后准备一个intent并发出重定向到该意图。 在准备intent时, referrer字段从url中提取并附加到intent如下所示: intent://scan/#Intent;scheme=com.example.android;package=com.example.android&referrer=4;end 这是我的BroadCastReceiver代码: public class InstallReferrerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { TinyDB tinyDB = new TinyDB(context); String referrer = intent.getStringExtra(“referrer”); tinyDB.putString(AppConstants.REFERRAL_ID, referrer); tinyDB.putBoolean(AppConstants.REFERRAL_SENT, false); } } 所以,基于上述intent ,我期望在这里得到的referrer的价值是4 。 但我得到的价值是这个字符串utm_source=google-play&utm_medium=organic 我做错了什么,如何修复它以获取referrer字段的正确值? 编辑 安装应用程序后,我在创建URL或从referrer字段中提取值时没有任何问题。 通过任何按钮点击邀请链接或直接在移动浏览器中打开邀请链接后,我使用上述内容“如果已经安装了应用程序,请打开应用程序,或者在Play商店应用程序上打开应用程序页面以供用户安装”。 问题是,如何通过上述意图将referrer字段的值从邀请链接传递到Play商店应用,以便Play商店收到此值并在安装时将其传递给应用。

如何保持我的BroadcastReceiver

目前我正在开发像Truecaller这样的呼叫拦截器应用程序。 我需要什么 即使我的应用程序已从最近的应用程序列表中删除,我也想检测来电。 Manifest.xml代码 我的广播接收器代码 @Override public void onReceive(Context context, Intent intent) { //my call blocking code } 我的问题 我的BroadcastReceiver不会在后台工作,就像我从最近的应用列表中删除一样。 我的完整清单代码在这里 我应该使用服务还是其他什么? 更新: 有了Suraj的回答,我在接收器中尝试了这个标签 android:enabled=”true” android:exported=”true” android:process=”:anotherProcess” 它适用于kitkat .. 但不适用于棒棒糖.. 更新的问题: Incase如果不能保持活动广播接收器即使我的应用程序关闭,我如何检测来电? 任何人给出详细答案..

android GoogleAuthUtil.getTokenWithNotification Intent回调未触发

我有一个后台服务调用GoogleAuthUtl.getTokenWithNotification并且它正常工作,但我正在尝试实现此function的回调部分,但是无法正常工作。 我已经实现了一个广播接收器并将其添加到清单中,我的应用程序中也有一个活动。 以下是相关的代码段。 GoogleAuthUtil.getTokenWithNotification GoogleAuthUtil.getTokenWithNotification(this.getContext(), account, “oauth2:” + GmailScopes.GMAIL_SEND, null, new Intent(AuthReceiver.AUTH_INTENT)); AuthReceiver public class AuthReceiver extends BroadcastReceiver { public final static String AUTH_INTENT = “com.testoauth.AUTH_INTENT”; public AuthReceiver() { } @Override public void onReceive(Context context, Intent intent) { Log.d(“RECEIVER”, “Received Auth broadcast.”); NotificationManager notificationManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancelAll(); } } AndroidManifest 我不知道为什么它没有收到广播。 我没有在日志中看到任何exception,也没有指示接收器被调用,在调试时它甚至不会在断点处中断。 我做错了什么吗? 编辑 我正在使用min […]

具有boot_completed的运行时exceptionAndroid O.

我正在尝试在我的BOOT_COMPLETED接收器中启动IntentService,但在Android O(API 26)中,我得到: java.lang.RuntimeException: java.lang.IllegalStateException: Not allowed to start service Intent { act=intent.action.update cmp=packageName.services.OwnService }: app is in background (消息在一行中,但这样更易读) 我怎么能以正确的方式做到这一点?

致命exception:android.app.RemoteServiceException:无法在android.os.Handler.dispatchMessage上传递广播

我在我的android应用程序上使用广播消息(从io.socket我发送广播消息到我的活动页面)。 在一些设备三星SM-G950F和SM-A520F我得到一个错误“ Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast ”。 我在Fabric crashlytics上遇到了这个错误,我也无法重现这个问题。 这是我从Fabric获得的日志, Fatal Exception: android.app.RemoteServiceException: can't deliver broadcast at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1813) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

广播充电器在Android O中断开

现在Android O的最终API已经发布,并且以下广播都没有列入白名单。我有以下问题: 在我的应用程序(目标API 25),我目前有一个BroadcastReceiver监听ACTION_POWER_CONNECTED和ACTION_POWER_DISCONNECTED系统事件。 现在我想更新我的应用程序来定位Android O,但是这个版本带来了广播行为的巨大变化 : 面向Android O的应用程序不能再在其清单中注册隐式广播的广播接收器。 隐式广播是一种广播,并不是专门针对该应用的。 由于这两个广播都是隐式的,所以我只能通过Context.registerReceiver()方法注册它们,但是问题是:一旦我的应用程序的进程被系统杀死,或者一旦系统清除了我的应用程序的内存由于设备内存不足),广播注册将会丢失。 为了避免这个问题,我可以使用JobScheduler API和ACTION_POWER_CONNECTED的setRequiresCharging方法,但对于ACTION_POWER_DISCONNECTED我必须使用registerReceiver方法。 由于我的应用程序控制设备的音量(基于这些事件),这些事件都不会被遗漏,这一点非常重要。 那么我怎样才能安全地监听Android O中断开的电源事件呢? 顺便说一句。 我有与WIFI断开连接事件相同的问题。 编辑:我很乐意做这个没有来自前台服务的通知

当检测到连通性变化时,更改ListView中随机项目的颜色

我有一个广播接收器,接收连接变化广播。所以它被触发,每当连接变化检测。我有一个列表视图与10个项目。每个项目有一个EditText包含该特定项目的位置从0到9.当广播被接收,从0到9生成一个随机数,根据生成的随机数,我想改变相应文本视图中文本的颜色。 如何实现这个? 我目前的代码是: 的Manifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.app.prateek.listviewbroadcastreceiver"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> </application> </manifest> MyReceiver.java package com.app.prateek.listviewbroadcastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; import java.util.Random; public class MyReceiver […]

广播延迟

我们使用广播来传达远程服务和我们的用户界面之间的状态变化。 这样做,我们发现了一个非常奇怪的行为:有时候(我找不到任何线索为什么)这些广播延迟了8秒左右。 我们如何发送它们(很基本, mState只是一个枚举)(远程进程在服务中): Intent intent = new Intent(); intent.setAction(ACTION_STATE_CHANGED); intent.putExtra(EXTRA_STATE, mState); Service.get().sendBroadcast(intent, null); 静态接收器如何注册(App): <receiver android:name=".ServiceStateReceiver"> <intent-filter> <action android:name="service.intent.action.STATE_CHANGE" /> </intent-filter> </receiver> 接收器类(App): public class ServiceStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v("State", "State via static received"); } } 现在有时会延迟(总是为了同样的状态) 状态枚举: public enum State { DISCONNECTED, BT_DISABLED, BT_SCANNING, BT_TIMEOUT, […]

安装引用不工作在一些红米设备

我需要跟踪我的android应用程序的安装引用。 它在大多数设备上工作正常。 但是在Redmi设备中,广播没有被触发。 我用Redmi Note 4testing了它 我已经通过亚行和玩商店进行了testing。 两者都不会在Redmi设备中触发广播 以下是我正在使用的代码 public class ReferrerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.d("Broadcast", "RECEIVED!"); } } <receiver android:name=".receiver.ReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER"/> </intent-filter> </receiver> 请build议如果有人面临同样的问题,并得到了一些解决scheme?

Awareness API和Android O使用BroadcastReceiver

我有一个Android应用程序,它使用Awareness API来设置耳机插入时的围栏。 我使用代码中的代码非常类似于https://developers.google.com/awareness/android-api/fence-register实现了AwarenessFence。 我有一个PendingIntent定义为: PendingIntent.getBroadcast(context, 0, new Intent("my.application.packageFENCE_RECEIVER_ACTION"), 0) 然后在我的AndroidManifest.xml文件中 <receiver android:name=".fence.FenceDetector$MyFenceReceiver"> <intent-filter> <action android:name="my.application.packageFENCE_RECEIVER_ACTION" /> </intent-filter> 这是在清单中声明,因为即使我的应用程序在后台,我也想接收广播。 这一切都运行良好的Android 7.0及以下,但是当我在Android 8.0上运行这个时,我得到的错误: BroadcastQueue: Background execution not allowed: receiving Intent { act=my.application.packageFENCE_RECEIVER_ACTION 我认为这是由于Android O上的后台执行的新的限制。 任何人都可以告诉我如何注册一个广播接收器,可以在运行API 26的Android设备的背景中侦听意识栅栏触发器。 让我知道如果有什么不清楚的东西,或者我需要阐述一些东西。 提前致谢