我已经实现了一个扩展NotificationListenerService的类,它适用于拾取已发布的通知.
我当时想要接收statusBarNotification对象并广播它.
我会做以下事情:
@Override
public void onNotificationPosted(StatusBarNotification statusBarNotification) {
Intent intent = new Intent();
intent.putExtra("STATUS_BAR_NOTIFICATION",statusBarNotification);
intent.setAction("com.example.NotificationPosted");
sendBroadcast(intent);
}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我收到以下错误:
01-05 01:50:14.333 19574-19673/com.example W/NotificationListenerService[NotificationListener]? Error running onNotificationPosted
java.lang.RuntimeException: Not allowed to write file descriptors here
at android.os.Parcel.nativeAppendFrom(Native Method)
at android.os.Parcel.appendFrom(Parcel.java:431)
at android.os.Bundle.writeToParcel(Bundle.java:1679)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.app.Notification.writeToParcel(Notification.java:962)
at android.service.notification.StatusBarNotification.writeToParcel(StatusBarNotification.java:106)
at android.os.Parcel.writeParcelable(Parcel.java:1285)
at android.os.Parcel.writeValue(Parcel.java:1204)
at android.os.Parcel.writeArrayMapInternal(Parcel.java:618)
at android.os.Bundle.writeToParcel(Bundle.java:1692)
at android.os.Parcel.writeBundle(Parcel.java:636)
at android.content.Intent.writeToParcel(Intent.java:7013)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:2361)
at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1127)
at android.content.ContextWrapper.sendBroadcast(ContextWrapper.java:365)
at com.example.NotificationListener.onNotificationPosted(NotificationListener.java:113)
at android.service.notification.NotificationListenerService$INotificationListenerWrapper.onNotificationPosted(NotificationListenerService.java:168)
at android.service.notification.INotificationListener$Stub.onTransact(INotificationListener.java:56)
at android.os.Binder.execTransact(Binder.java:404)
at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到我做错了什么,或者这是不可能的.StatusBarNotification实现Parcelable
android android-intent android-notifications android-broadcast
我想在广播接收器中检查互联网连接; 并将结果(一个布尔标志)设置为全局变量,以便在整个应用程序中使用它,如果条件; 如果互联网断开连接,请在主活动中将状态图像视图设置为红色图像,如果已连接,则将其设置为绿色.
我跟着这个话题.但getApplication()广播接收器中没有; 而我应该使用getApplicationContext().
另一方面,这个话题:
当在广播接收器中编写代码时,它不是上下文但在其onReceive方法中给出了上下文,您只能调用getApplicationContext().这也意味着您无法保证能够在BroadcastReceiver中访问您的应用程序.
有什么顾虑?
如何在广播Receiver中访问我的应用程序类?
是否有更好的解决方案来检查互联网连接,设置全局变量和更改我的状态imageview?
android broadcastreceiver android-lifecycle android-broadcast
StackOverflow和其他地方有很多示例使用该类LocalBroadcastManager来避免在应用程序之外广播事件.
但是,此类使用Android支持库,如包名称所示:android.support.v4.content.LocalBroadcastManager.
LocalBroadcastManager在标准SDK中是否有相当于不使用Android支持库的内容?
似乎没有这种sendBroadcast方法android.content.Context具有这种安全粒度.
我有一个Activity我在BroadcastReceiver本地注册如下:
public class SomeActivity extends Activity{
public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_activity_layout);
.....
.....
IntentFilter filter = new IntentFilter();
filter.addAction(PERFORM_SOME_ACTION);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// perform some action ...
}
};
registerReceiver(receiver, filter);
}
.....
.....
}
Run Code Online (Sandbox Code Playgroud)
我有一个Service广播Intent如下:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
sendBroadcast(i); …Run Code Online (Sandbox Code Playgroud) android android-service android-broadcast localbroadcastmanager android-broadcastreceiver
有没有办法通过扩展BroadcastReceiver来监听传入的呼叫来监听OS的广播,而不使用PhoneStateIntentReceiver或PhoneStateListener.另请告诉我清单中的操作和权限是什么.
我已经尝试过如下但是它不适用于来电但是为传出工作
应用程序中唯一一个.java文件如下(app只有一个.java文件和一个清单文件)
package com.crsardar.media.audio;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class IncommingCallReceiverCRS extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.e("Chitta : ", "Its working");
}
}
Run Code Online (Sandbox Code Playgroud)
表现
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.crsardar.media.audio"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="IncommingCallReceiverCRS" android:enabled="true">
<intent-filter>
<!--action android:name="android.intent.action.NEW_OUTGOING_CALL"/-->
<action android:name="android.intent.action.ANSWER" >
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>
Run Code Online (Sandbox Code Playgroud) 文档AlarmManagerstartes该
注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此.对于正常的计时操作(刻度,超时等),使用Handler更容易,也更有效.
但是,一旦我的应用程序关闭(强制从任务管理器关闭),我的警报就不起作用,并且OnReceive永远不会在广播接收器内调用该方法.我的目标是4.x.
发生了什么?
我开发了一个应用程序,有些人抱怨它需要太多的电池,这是屏幕后第二大消耗的过程.但是,在某些设备中,它不会消耗那么多电池.
我的应用程序所做的所有工作都在服务中.该服务是粘性的并且一直在运行(android系统可能在资源较少时将其杀死或在设备进入休眠状态时暂停),只要屏幕打开就有监听加速度计,它不是前台服务并没有举行唤醒锁.
有人能告诉我为什么需要大量电池吗?为什么这只发生在一些设备上?
这是相关代码:
public class aListenerService extends Service implements SensorEventListener
{
private BroadcastReceiver mScreenReceiver = new BroadcastReceiver()
{
// if screen was turned on then register to accelerometer
// if screen was turned off then unregister from accelerometer
}
private BroadcastReceiver mPhoneStateReceiver = new BroadcastReceiver()
{
// do something...
}
@Override
public void onCreate()
{
super.onCreate();
// get sensor manager and accelerometer sensor
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// register accelerometer sensor and receiver
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); …Run Code Online (Sandbox Code Playgroud) 有没有办法判断是否收到了LocalBroadcastManager广播?还是正在听?
基本上我有一个IntentService监听Google Cloud Messages.当它得到一个我需要显示通知或警告我的主要服务,有一个新的消息 - 至关重要的是,我不想要两个!所以我需要知道我的主要服务是否处理了该消息......
显然,可以使用sendOrderedBroadcast和BroadcastReceiver来完成它,但这对于我简单的私有内部进程需求来说似乎有些过分.
android broadcastreceiver android-broadcast localbroadcastmanager
在Android操作系统中,在" 设置 " - >" 位置服务 "中,有一个名为" 访问我的位置 " 的切换按钮,可用于禁用和启用应用程序的位置信息访问.
目前,我正在开发一个位置服务应用程序.我想知道,我怎么能在我的Android项目中听这个设置?当用户禁用或启用" 访问我的位置 " 时,是否有任何广播接收器可以立即知道?
如果没有任何广播接收器,我如何在Android项目中听取此更改?
无论是蓝牙耳机还是手机?
如何在Android代码中区分蓝牙耳机和支持蓝牙的Android设备.
我正在开发一个小应用程序,因为我有通过蓝牙阻止数据传输的功能,但它需要允许通过蓝牙耳机进行通信.
我提到了示例和代码,因为他们建议我只配对/取消配对蓝牙设备. Android:如何以编程方式配对蓝牙设备?
or else
Run Code Online (Sandbox Code Playgroud)获取所有连接的设备. 在Android中,如何获取连接的蓝牙设备的配置文件?
是否可以在与设备连接类型相关的设备中获取任何广播消息?
请帮我解决这个问题,将连接的蓝牙设备区分为耳机/安卓设备(手机)等.,
先感谢您.