小编For*_*rce的帖子

从parcelable,contentView或contentIntent中提取通知文本

所以我让我的AccessibilityService使用以下代码:

@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
        List<CharSequence> notificationList = event.getText();
        for (int i = 0; i < notificationList.size(); i++) {
            Toast.makeText(this.getApplicationContext(), notificationList.get(i), 1).show();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它可以很好地读出创建通知时显示的文本(1).

在此输入图像描述

唯一的问题是,我还需要在用户打开通知栏时显示的值(3).(2)对我来说并不重要,但知道如何阅读它会很好.您可能知道,所有值都可能不同.

在此输入图像描述

那么,我怎么读出来(3)?我怀疑这是不可能的,但我notificationList似乎只有一个条目(至少只显示一个吐司).

非常感谢!

/ edit:我可以使用提取通知包裹

if (!(parcel instanceof Notification)) {
            return;
        }
        final Notification notification = (Notification) parcel;
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何从/ notification或中提取通知的消息.notification.contentViewnotification.contentIntent

有任何想法吗?

/编辑:澄清这里的问题:我如何读出(3)

notifications android parcelable android-pendingintent

39
推荐指数
5
解决办法
2万
查看次数

从服务调用setVolumeControlStream

我需要setVolumeControlStream通过一个播放声音的服务来呼叫STREAM_SYSTEM.显然在一个没有问题的Activity中,但是如何使用服务呢?

android android-service android-audiomanager

17
推荐指数
1
解决办法
3842
查看次数

如何利用NotificationListener使用Android Nougat的直接回复功能?

我的应用程序使用a NotificationListener来读取来自各种第三方应用程序的消息,例如WhatsApp.

到目前为止,如果只有一个聊天未读,我能够发送回复,代码如下.

但是,在WhatsApp的情况下,getNotification().actions当未读取两个以上的聊天时返回一个空对象,因为消息被捆绑在一起.正如您在下面的图片中看到的,如果通知被扩展,还有一个选项可以发送直接回复,因此我确信可以利用它,我认为像PushBullet这样的应用程序正在使用此方法.

我怎样才能访问该通知的RemoteInput?

public static ReplyIntentSender sendReply(StatusBarNotification statusBarNotification, String name) {

            Notification.Action actions[] = statusBarNotification.getNotification().actions;

            for (Notification.Action act : actions) {
                if (act != null && act.getRemoteInputs() != null) {
                    if (act.title.toString().contains(name)) {
                        if (act.getRemoteInputs() != null)
                            return new ReplyIntentSender(act);
                    }
                }
            }
            return null;
        }



public static class ReplyIntentSender {
      [...]

    public final Notification.Action action;

    public ReplyIntentSender(Notification.Action extractedAction) {
            action = extractedAction;
     [...]
    }

private boolean sendNativeIntent(Context context, String message) {
            for (android.app.RemoteInput rem …
Run Code Online (Sandbox Code Playgroud)

android notification-listener android-7.0-nougat remote-input

17
推荐指数
1
解决办法
1702
查看次数

如何导出活动,以便其他应用程序可以调用它?

我搜索了很多,但我没有找到如何导出活动的精确答案,因此应用程序可以启动它startActivityforResult.

我如何实现这一目标?我是否必须在某些方面更改清单?

android sharing android-activity

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

使用Root权限运行服务或使用root添加权限

我目前正在开发一款应用程序,可在驾驶时读取短信/电子邮件.许多用户都希望得到WhatsApp/KakaoTalk的支持.

但是,由于没有"官方"方式来接收他们的消息,因此只有三个选项,都需要root:

在给定的intervall中扫描数据库的更简单方法.

  • 易于实施.
  • 但电池效率不高
  • 此消息也不会立即读出.

另一种方法是运行具有root权限的服务并注册侦听其推送通知的接收器.这必须使用root来完成,因为两个软件包都需要基于签名的权限才能接收其推送通知.

  • 更难实施
  • 更好的用户体验

还有另一件事我想到:安装后是否可以手动添加APK权限?在这种情况下,我可以将c2dm权限添加到我的包中.

  • 这会让事情变得非常简单
  • 但是,我有点害怕更改我的应用程序的权限,因为这完全违反了Android Sandbox原则.
  • 不过,如果有可能,请告诉我!

问题是,我究竟如何运行具有root权限的服务(实际上是否可能)?我知道如何使用root运行shell命令或二进制文件,但我不知道如何以root身份启动APK的一部分.

是否可以将BroadcastReceiver集成到二进制文件中?我实际上没有使用C/C++的经验,尤其是在Android环境中.

你能帮帮我吗?谢谢.

编辑:就像我在评论中说的那样,我不想使用AccesibilityService,因为它不符合我的需要(例如,如果有多个未读消息,它会给我"2条未读消息",也不包括完整消息身体).

edit2:只是澄清事情:我知道如何用root运行命令.我需要知道的是如何注册接收特定广播"普通"接收器的广播接收器,因为广播本身需要我没有的基于签名的许可.

android root android-service

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

AccessibilityService已启动,但未在JellyBean上接收AccessibilityEvents

我有一个AccessibilityService,它将读出任何传入的通知.它在ICS及以下版本中运行良好,但已停止使用JB.

以下是清单和代码:

<service
        android:name=".Services.InstantMessengerJb"
        android:enabled="@bool/is_post_jb"
        android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
        tools:ignore="ExportedService" >
        <meta-data
            android:name="android.accessibilityservice"
            android:resource="@xml/accessibility_service_config" />

        <intent-filter>
            <action android:name="android.accessibilityservice.AccessibilityService" />
        </intent-filter>
    </service>
Run Code Online (Sandbox Code Playgroud)
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
    SettingsClass.logMe(tag, "New event!");
    new AccessibilityProcessing(this, event);
}

@Override
protected void onServiceConnected() {
    if (isInit) {
        return;
    }
    SettingsClass.logMe(tag, "We are connected!");
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
    setServiceInfo(info);
    isInit = true;
}
Run Code Online (Sandbox Code Playgroud)

如前所述,它确实适用于所有preJB设备,如魅力,但在JB上服务启动(我得到"我们已连接"),但没有一个事件被触发.

代码有什么问题吗?

android accessibilityservice android-4.2-jelly-bean

11
推荐指数
1
解决办法
9236
查看次数

如何镜像图像文件?(2.2+)

我有一个PNG文件,我想用于覆盖 - 但是,这个文件必须被镜像(并旋转180°),但为了节省空间,我不想将镜像文件放在apk中,但以编程方式执行此操作.

我怎么能用Froyo及以上的方式做到这一点?

android image-manipulation image

10
推荐指数
2
解决办法
8683
查看次数

蓝牙设备连接/断开时广播?

我希望在连接特定蓝牙设备时启动服务,并在断开连接时停止此服务.显然我不希望有一个后台服务,总是检查BT设备是否已连接,所以我想用接收器实现这一点.

这有可能吗?android.bluetooth.device.action.ACL_CONNECTED这里提到,但显然它没有用.

谢谢!

android bluetooth broadcastreceiver

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

什么是Earcon?

我只是偶然发现了TextToSpeech.addEarcon(String, String)Android的TTS API中的方法.我实际上无法在网上找到更多信息,所以有人知道什么是耳环吗?

谢谢!

android text-to-speech

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

如何确定Android上的Skype通话当前是否处于活动状态

好的,我反编译了Skype的清单,以确定在通话过程中是否有任何服务或广播正在运行.来电只有几个内部广播.此外,只存在一个接收器和一个服务.

我使用我的应用程序监视所有正在运行的服务,但SkypeMainService始终在运行,即使不在通话中也是如此.

AudioModeskype 也没有改变(但根据开发人员想要的logcat-logs,但他们只是不这样做),所以我不能简单地检查它是否是MODE_IN_CALL.

如果Skype目前正在运行并且正在通话,您有什么建议吗?

谢谢!

/ edit:活动等的简要概述:

<activity android:name="com.skype.raider.Main">
<activity-alias android:name="com.skype.raider.ui.SplashScreenActivity" android:targetActivity="com.skype.raider.Main">
<receiver android:name="com.skype.MainReceiver" android:enabled="true" android:exported="false">
   <action android:name="android.intent.action.BOOT_COMPLETED" />
   <action android:name="android.intent.action.MEDIA_MOUNTED" />
   <action android:name="android.intent.action.SEARCH" />
   <action android:name="android.intent.action.CALL_PRIVILEGED" />
   <action android:name="com.skype.raider.INCOMING_GSM_CALL" />
   <action android:name="com.skype.raider.ON_GSM_CALL" />
   <action android:name="com.skype.raider.intent.action.request_sync" />
</receiver>
<service android:name="com.skype.MainService">
Run Code Online (Sandbox Code Playgroud)

android skype android-package-managers

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