标签: android-broadcast

Android,播放parcelable数据

我已经实现了一个扩展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

9
推荐指数
1
解决办法
2322
查看次数

访问Broadcast Receiver中的应用程序类

我想在广播接收器中检查互联网连接; 并将结果(一个布尔标志)设置为全局变量,以便在整个应用程序中使用它,如果条件; 如果互联网断开连接,请在主活动中将状态图像视图设置为红色图像,如果已连接,则将其设置为绿色.

我跟着这个话题.但getApplication()广播接收器中没有; 而我应该使用getApplicationContext().

另一方面,这个话题:

当在广播接收器中编写代码时,它不是上下文但在其onReceive方法中给出了上下文,您只能调用getApplicationContext().这也意味着您无法保证能够在BroadcastReceiver中访问您的应用程序.

  1. 有什么顾虑?

  2. 如何在广播Receiver中访问我的应用程序类?

  3. 是否有更好的解决方案来检查互联网连接,设置全局变量和更改我的状态imageview?

android broadcastreceiver android-lifecycle android-broadcast

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

相当于没有Android支持库的LocalBroadcastManager

StackOverflow和其他地方有很多示例使用该类LocalBroadcastManager来避免在应用程序之外广播事件.

但是,此类使用Android支持库,如包名称所示:android.support.v4.content.LocalBroadcastManager.

LocalBroadcastManager在标准SDK中是否有相当于不使用Android支持库的内容?

似乎没有这种sendBroadcast方法android.content.Context具有这种安全粒度.

sdk android android-broadcast

9
推荐指数
1
解决办法
781
查看次数

服务未收到活动的本地广播

我有一个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

9
推荐指数
1
解决办法
2870
查看次数

通过BroadcastReceiver监听传入的呼叫,无需PhoneStateIntentReceiver或PhoneStateListener

有没有办法通过扩展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)

android android-broadcast

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

应用程序强制关闭时,AlarmManager不起作用

文档AlarmManagerstartes该

注意:警报管理器适用于您希望在特定时间运行应用程序代码的情况,即使您的应用程序当前未运行也是如此.对于正常的计时操作(刻度,超时等),使用Handler更容易,也更有效.

但是,一旦我的应用程序关闭(强制从任务管理器关闭),我的警报就不起作用,并且OnReceive永远不会在广播接收器内调用该方法.我的目标是4.x.

发生了什么?

android broadcastreceiver alarmmanager android-broadcast

8
推荐指数
1
解决办法
5341
查看次数

长时间运行的服务消耗大量电池

我开发了一个应用程序,有些人抱怨它需要太多的电池,这是屏幕后第二大消耗的过程.但是,在某些设备中,它不会消耗那么多电池.

我的应用程序所做的所有工作都在服务中.该服务是粘性的并且一直在运行(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)

android android-service android-sensors android-broadcast

8
推荐指数
1
解决办法
5511
查看次数

有没有办法判断是否收到了LocalBroadcastManager广播?

有没有办法判断是否收到了LocalBroadcastManager广播?还是正在听?

基本上我有一个IntentService监听Google Cloud Messages.当它得到一个我需要显示通知或警告我的主要服务,有一个新的消息 - 至关重要的是,我不想要两个!所以我需要知道我的主要服务是否处理了该消息......

显然,可以使用sendOrderedBroadcast和BroadcastReceiver来完成它,但这对于我简单的私有内部进程需求来说似乎有些过分.

android broadcastreceiver android-broadcast localbroadcastmanager

8
推荐指数
1
解决办法
1910
查看次数

在设置中收听位置访问禁用/启用

在Android操作系统中,在" 设置 " - >" 位置服务 "中,有一个名为" 访问我的位置 " 的切换按钮,可用于禁用和启用应用程序的位置信息访问.

目前,我正在开发一个位置服务应用程序.我想知道,我怎么能在我的Android项目中听这个设置?当用户禁用或启用" 访问我的位置 " 时,是否有任何广播接收器可以立即知道?

如果没有任何广播接收器,我如何在Android项目中听取此更改?

android broadcastreceiver android-intent android-broadcast

8
推荐指数
2
解决办法
3160
查看次数

如何以编程方式区分android中连接的蓝牙设备?

无论是蓝牙耳机还是手机?

如何在Android代码中区分蓝牙耳机和支持蓝牙的Android设备.

我正在开发一个小应用程序,因为我有通过蓝牙阻止数据传输的功能,但它需要允许通过蓝牙耳机进行通信.

请帮我解决这个问题,将连接的蓝牙设备区分为耳机/安卓设备(手机)等.,

先感谢您.

android bluetooth android-broadcast android-bluetooth

8
推荐指数
1
解决办法
2806
查看次数