小编JBA*_*JBA的帖子

为什么NotificationListenerService无法正常工作

我在没有太多运气的情况下与NotificationListenerService作斗争.我尝试了很多在这里和那里找到的食谱,特别是这样......但它的作用相当不一致.

首先看一下代码:

清单:

<service
    android:name=".services.NLService"
    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE" >
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)

那么服务本身:

public class NLService extends NotificationListenerService {

    private String TAG = "NLService";

    // bind and unbind seems to make it work with Android 6...
    // but is never called with Android 4.4... 
    @Override
    public IBinder onBind(Intent mIntent) {
        IBinder mIBinder = super.onBind(mIntent);
        Log.i(TAG, "onBind");
        return mIBinder;
    }

    @Override
    public boolean onUnbind(Intent mIntent) {
        boolean mOnUnbind = super.onUnbind(mIntent);
        Log.i(TAG, "onUnbind");
        isNotificationAccessEnabled = false;
        try {
        } catch (Exception …
Run Code Online (Sandbox Code Playgroud)

android android-notifications

15
推荐指数
1
解决办法
9375
查看次数

如何使用反射来更改备份服务?

我发布了一个关于Android 5.1的新行为的问题,该行为在设备上设置设备所有者时会禁用备份服务...

一个可能的解决方案可能是(我猜)使用反射来解决问题:我可以在隐藏类中使用特定方法找到一些反射示例,但这种情况看起来更复杂,使用另一个隐藏类(ServiceManager)的构造函数我不知道如何做到这一点......

令我烦恼的代码位于第3739至3749行的DevicePolicyManagerService.java(可在此处找到):

long ident = Binder.clearCallingIdentity();
try {
    IBackupManager ibm = IBackupManager.Stub.asInterface(
        ServiceManager.getService(Context.BACKUP_SERVICE));
    ibm.setBackupServiceActive(UserHandle.USER_OWNER, false);
} catch (RemoteException e) {
    throw new IllegalStateException("Failed deactivating backup service.", e);
} finally {
    Binder.restoreCallingIdentity(ident);
}
Run Code Online (Sandbox Code Playgroud)

我的目标是重新启用备份服务,理想情况下,这将调用类似于:

ibm.setBackupServiceActive(UserHandle.USER_OWNER, false);
Run Code Online (Sandbox Code Playgroud)

你能帮帮我吗?

reflection android

7
推荐指数
1
解决办法
840
查看次数

安装设备所有者应用程序的更新

有没有人知道在更新发生时,通过Google Play分发的设备所有者应用程序的生产行为是什么?

我们知道,安装一个设备所有者应用程序需要一些动力并且并不容易:重置为出厂默认设置然后使用第二个设备进行NFC设置等等......所以即使我们考虑完成这一步骤,任何进一步的更新都会涉及到如此多痛苦,每一次?

出现这个问题是因为在我的开发设备上,如果先前安装了更改,我无法重新启动设备所有者应用程序...除非我将设备重置为出厂设置!

谢谢阅读…

android android-5.0-lollipop device-owner

5
推荐指数
1
解决办法
2088
查看次数

从NFC安装位于GooglePlay的应用

使用Lollipop时,我有一个设备所有者应用程序,该设备所有者应用程序在供应时随NFC一起安装。
我现在需要的是处理我的App的自动更新,从Google Play依靠标准的Android App更新系统...

到目前为止,我可以想象完成此任务的2种方法,但是不知道如何处理它们:

  1. 在我的NFC中,安装常量EXTRA PROVISIONING DEVICE ADMIN PACKAGE DOWNLOAD LOCATION,直接从Play商店安装该应用程序,而不是在我自己的开发服务器上安装该URL。
    但是,此常量需要处理apk文件的网址,我没有找到任何直接从Play商店直接获取apk安装的正式方法?(因为将来它将成为生产应用程序,所以我对黑客不感兴趣)
  2. 继续从开发服务器上安装apk,但随后允许该应用使用位于Play商店中具有相同软件包名称的小弟弟进行更新。
    换句话说:是否可以在自定义位置安装v1 apk,然后将v2放在PlayStore上,让魔术成真?

我很高兴听到有人能分享有关此类程序的经验。谢谢阅读!


@Stephan Branczyk建议后进行编辑,我可以再进行一些测试,这是我的工作和结果:

1-在NFC设置中,我用snep://my.app.packagename替换了apk网址,但是没有运气;它只是给出了一个错误而没有太多解释。

2-我用一个PlayStore链接替换了该网址:https : //play.google.com/store/apps/details? id = my.app.packagename, 但是无论我使用本地计算的校验和还是它都会产生校验和错误。 GooglePlay apk详细信息中提供的校验和。它看起来离目标不远,但我无法使其实现。

3-终于我回到了第一个解决方案,一个自托管的apk版本1 ...但是这次,我尝试将PlayPack的应用程序2更新版本,其包名完全相同...这导致我奇怪的事情:

  • 最初,我的应用程序没有出现在本地PlayStore应用程序中的任何位置,但是当我在Google Play中搜索它时,它显示为绿色的“已安装”徽章,并建议我进行更新...我也是。
  • 然后,在第一次手动更新后,该应用程序将在v2中运行,并且更好,更好:它在我的PlayStore中列出的很好。
  • 乐观的说,我上传了v3版本的应用程序...只是为了查看我的PlayStore是否会自动更新我的应用程序(其他所有应用程序也是如此),但遗憾的是没有运气:即使我的应用程序仍在Playstore中列出,并提出“更新”按钮...它永远不会自行更新;我仍然需要手动单击它。

这是一种奇怪的行为吗?如果有人对此有想法,我真的需要能够依赖Play商店的功能,但到目前为止还算不上运气,而且我不敢相信Device-Owner应用分发版与PlayStore不兼容?


以防万一,这里仅供参考,这是我正在使用的那种配置代码:

try {
            Properties p = new Properties();

            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
                    "my.app.packagename");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION,
                    "http://www.example.com/myDeviceOwnerApp.apk");
            p.setProperty(
                    DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM,
                    "U55o3fO0cXQtUoQCbQEO9c_gKrs");

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            OutputStream out = new ObjectOutputStream(bos);
            p.store(out, "");
            final byte[] bytes = bos.toByteArray();

            NdefMessage …
Run Code Online (Sandbox Code Playgroud)

android nfc google-play android-5.0-lollipop device-owner

5
推荐指数
1
解决办法
1348
查看次数

设备所有者现在禁用备份服务

我的设备所有者应用程序出现问题:在 Android 5.1 之前它运行良好,但现在更新到 Android 5.1 后,安装设备所有者应用程序会禁用备份服务。

现在在设备设置中,当进入备份和重置选项时,备份服务是灰色的,表示:备份服务处于非活动状态。这是由您的设备政策设置的

我可以在 google git 存储库上找到这个源代码......代码不是很长且易于理解,他们使用 android.app.backup.IBackupManager 来禁用该服务......但更容易的是提交评论:

设置设备所有者时关闭备份管理器服务

这是他们所做的:

import android.app.backup.IBackupManager;

// Shutting down backup manager service permanently.
long ident = Binder.clearCallingIdentity();
try {
    IBackupManager ibm = IBackupManager.Stub.asInterface(
        ServiceManager.getService(Context.BACKUP_SERVICE));
    ibm.setBackupServiceActive(UserHandle.USER_OWNER, false);
} catch (RemoteException e) {
    throw new IllegalStateException("Failed deactivating backup service.", e);
} finally {
    Binder.restoreCallingIdentity(ident);
}
Run Code Online (Sandbox Code Playgroud)

哇...这对我的项目来说是一个严重的缺陷!不开玩笑:现在真的不可能让用户在安装设备所有者应用程序时备份他的数据吗?

所以,希望这里有人可以有信息或经验来分享这个?可悲的是,我对此并不熟悉,但也许通过反思可以在事后修复?

感谢您的阅读!

android android-backup-service device-owner

4
推荐指数
1
解决办法
1963
查看次数