Articles of broadcastreceiver

从监听呼出的广播接收机发起活动

我试图从一个广播接收机开始一个活动,这个广播接收机监听5556的去电呼叫。问题是活动没有启动,但拨号内置活动正在被调用,我已经将意图的优先级改变为100,但是无济于事。 我如何获得拨号发起的活动而不是内置的呼叫活动? 这里是代码: package com.messageHider; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class launchReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String number=intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); String compare_num="5556"; if(number.equals(compare_num)) { Intent myintent=new Intent(context,messageHider.class); myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(myintent); abortBroadcast(); } } } 清单文件: <receiver android:name=".launchReceiver"> <intent-filter android:priority="0"> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver>

广播接收机收到的意图是否可以为空?

换一种说法 : @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); // can intent==null here ? // could it ever throw a NPE ? } 我需要一劳永逸地解决这个问题,所以请不要如果和buts。 我会检查为空,但我怀疑这是不需要的,因此检查笨拙和不雅。 我在文档中search,但没有发现任何东西 编辑:在谷歌组询问 – 看到有一些有趣的点

广播接收机在不同版本的Android(4.1.1和4.2.2)

我有一个问题,当我运行我的Android应用程序有广播接收器 WiFi 。 它在不同版本的Android OS上performance不同(如4.1.1和4.2.2 )。 当我在4.1.1上运行它时,它的工作原理就像广播接收器在Wifi状态改变时接收到广播投影(在断开WiFi广播接收时,我计算了无线连接的总时间并将其存储在数据库中)。 但是当我在4.2.2上运行时, 广播接收器在Wifi断开连接时调用两次,所以在那个时间值(即无线连接的时间) 两次存储在数据库中。 所以我需要知道为什么会发生这种情况?为什么广播接收器在无线连接断开 两次时调用? 我需要的代码,使其适用于所有Android版本 。 这是我的代码。 Android Menifest文件 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.evowifiservice" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" android:targetSdkVersion="17"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.evowifiservice.MainActivity" android:label="@string/app_name" > […]

BroadcastReceiver被调用时如何解锁屏幕?

你可以猜到,我通过AlarmManager注册了一个警报。 而BroadcastReceiver将被正确调用。 但是当它叫,我的手机屏幕仍然locking。 我注意到默认的AlarmClock应用程序不是这样的。 所以我的问题是,如何在BroadcastReceiver被调用时解锁屏幕? (解锁屏幕可以让用户直接操作我的Activity)提前致谢。

拦截INSTALL_REFERRER,然后转发到Google AnalyticsReceiver

我写了一个安装接收器,以确定何时通过市场安装了一个应用程序。 不过,我也想将INSTALL_REFERRER广播传递到其他接收器,例如Google Analytics AnalyticsReceiver接收器,如果它安装在应用程序中。 重要的是,我不知道是否安装了其他接收器,因为我的接收器将被他们的应用程序中的其他开发者使用。 目前,我收到广播,当我完成电话: AnalyticsReceiver receiver = new AnalyticsReceiver(); receiver.onReceive(context, intent); 问题是AnalyticsReceiver类可能不存在。 那么如果我不确定应用程序是否使用AnalyticsReceiver那么如何传播广播呢? 或者,Android本身会确保安装的每个接收器都获得广播? 非常感谢!

来电录音/处理服务! – Android

你好, 我正在开发Android的解决scheme,将logging呼叫(包括输出和input),并进一步处理logging的数据(在我的应用程序的终点,没有audio文件数据将保存在手机内存)。 我已经实现与PhoneStateListener.LISTEN_CALL_STATE BroadcastReceiver启动logging服务,如果状态是CALL_STATE_OFFHOOK。 然后在服务中,我开始一个尝试录制呼叫的新线程,以及另一个带有PhoneStateListener.LISTEN_CALL_STATE的BroadcastReceiver,如果电话状态更改为TelephonyManager.CALL_STATE_IDLE,则调用方法停止录制。 所创build的audio文件是空的。 我的服务中的recorder.stop()方法被调用时抛出exception。 错误在哪里? 我能做得更好吗? 首先(独立)BroadcastReceiver: package com.piotr.callerrecogniser; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; public class CallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { MyPhoneStateListener phoneListener = new MyPhoneStateListener(context); TelephonyManager telephony = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE); } class MyPhoneStateListener extends […]

为什么在BroadcastReceiver中调用setResult?

在谷歌的C2DM示例代码中,当BroadcastReceiver收到通知时,它们会调用: setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 我不知道setResult做什么。 这是他们在Android文档中所说的内容: 更改从此广播返回的所有结果数据; 仅适用于通过Context.sendOrderedBroadcast发送的广播。 所有当前的结果数据都被赋予此方法的值所取代。 有人可以解释他们的意思,为什么我需要打电话吗? 完整的代码: public class C2DMBaseReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { C2DMReceiver.runIntentInService(); setResult(Activity.RESULT_OK, null /* data */, null /* extra */); } }

将服务绑定到BroadcastReceiver

我有一些服务类,它注册了多个警报。 在我的BroadcastReceiver类中,我想让onReceive ()方法调用Service类的某个方法。 但是,我不明白我怎么能把他们绑在一起。 我试图让BroadcastReceiver成为一个内部类,但是我得到了更多的错误,根本无法触发警报。 谢谢

清单中的ACTION_USER_PRESENT与BroadcastReceiver

是否有可能通过清单捕获ACTION_USER_PRESENT屏幕解锁似乎有不同的意见。 这个线程意味着没有它不能做到: Android广播接收器不工作 这个线程意味着是可以做到的: 广播接收器ACTION_USER_PRESENT,ACTION_SCREEN_ON,ACTION_BOOT_COMPLETED 我无法使用2.3.3或3.2仿真器来处理事件。 其他人有最近的经验吗? 也许一个代码示例分享?

为什么proguard处理AndroidManifest.xml

我看到一些不明原因的Proguard行为。 AFAIK proguard不注意android清单。 此外,在我的proguard.cfg我没有提及BroadcastReceiver相关的类。 所以我认为这些应该被剥离。 但是我在bin / proguard.txt中看到一些奇怪的东西: # view AndroidManifest.xml #generated:784 -keep class com.fiksu.asotracking.InstallTracking { <init>(…); } 而那个类(BroadcastReceiver的下属)并没有被剥离。 理性对我没有任何意义: [proguard] com.fiksu.asotracking.InstallTracking [proguard] is kept by a directive in the configuration. 如果class级没有在清单中提到,就会被剥离。 很高兴知道为什么。