小编zee*_*han的帖子

需要有关如何在后台永远运行Android服务的代码示例,即使设备正在休眠,如Whatsapp?

我已经尝试了各种方法来实现这一目标,但我的服务最终会被杀死.

我想用AlarmManager每隔一小时触发一次课.即使设备处于休眠状态,它也应该发出闪烁的LED警报,振动或声音.无论如何,它应该永远运行.

我注意到Whatsapp一直在运行,即使我杀死所有正在运行的应用程序并清除内存,让设备进入睡眠状态,但仍然Whatsapp接收消息并提醒我.他们是怎么做到的?我想对我的应用做同样的事情.

service android background-process alarmmanager

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

Xcode 9.x行复制和删除

直到Xcode 8.0,才有可能自定义IDETextKeyBindingSet.plist文件.但是,现在看来修改此文件会导致Xcode停止正常运行(例如箭头键停止工作),并且似乎不再可能创建自己的快捷键.

Xcode从未有过行复制和插入快捷方式.以前可以通过在正确的位置添加以下内容将它们添加到IDETextKeyBindingSet.plist中:

<key>Insert New Line Below</key>
<string>moveToEndOfLine:, insertNewline:</string>
<key>Insert New Line Above</key>
<string>moveUp:, moveToEndOfLine:, insertNewline:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
<key>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>
Run Code Online (Sandbox Code Playgroud)

有人知道如何在Xcode 8.0或更高版本中实现相同的目标吗?

我想知道Apple的开发人员是否使用Xcode?如果他们检查StackOverflow?或者他们是否被雇佣合同禁止?

编辑:在Xcode 9.x它似乎再次工作.

编辑:在Xcode 10.0中它再次被打破.

编辑:在Xcode 10.1中,它仍然被破坏,复制/粘贴部分被破坏,这意味着它并不总是有效.(我还在High Sierra)

xcode8

12
推荐指数
2
解决办法
4938
查看次数

Android Billing V3订阅问题 - 订阅处于无法取消的状态

UPDATE

随着时间的推移,更多的故障排除表明我有一个特定的订阅,处于卡住状态,这意味着我无法取消它,这就是以某种方式导致所有问题.无论是在浏览器上还是在手机或平板电脑上试图取消它都会出现同样的错误:

错误信息

我尝试了三个帐户.没有这个旧订阅的两个新帐户对我的调试工作正常.我以前订阅此项目的主要帐户是问题发生的地方.所以如果我能以某种方式取消这个订阅,我会很好.

我总共有三个订阅项目.我可以在测试和常规帐户上轻松订阅和取消其他两个没有问题.但是,这个特别的一个,这是一年多了,我无法取消.这导致IabHelper查询中的所有错误.

我该如何取消?不幸的是,由于一些神秘的原因谷歌不允许删除订阅项目.


我的单笔购买工作正常,但没有订阅.在过去的很多天里,我遇到了这个问题,我无法获得我的应用程序的订阅信息,但它失败了:

if (result.isFailure()) {
            Log.v(Constants.TAG, "Failed to query inventory: " + result);
            return;
        }
Run Code Online (Sandbox Code Playgroud)

我已经阅读了所有与应用程序结算相关的帖子,并尝试了在我的应用程序的多个版本上的多个设备,Alpha和生产版本上可以完成的所有内容,但无法摆脱此错误:

Failed to query inventory: IabResult: Error refreshing inventory (querying owned subscriptions). (response: -1003:Purchase signature verification failed)
Run Code Online (Sandbox Code Playgroud)

我理解空白签名的问题,但现在应用程序已在生产中发布,但在我的设备上安装时,我的日志中仍会出现相同的错误.所以我现在在Play商店中有一个生产应用程序,订阅不起作用.这是我希望获得签名价值的最后一个绝望的步骤.非常不幸的是,没有真正简单的方法来调试应用内代码.

在以下的verifyPurchases中,Security.java中的代码失败(这似乎是许多人失败的常见地方):

if (TextUtils.isEmpty(signedData) || TextUtils.isEmpty(base64PublicKey) ||
            TextUtils.isEmpty(signature)) {
        Log.e(TAG, "Purchase verification failed: missing data.");
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

可悲的是,订阅的在线帮助很少甚至没有.我尝试了人们提出的其他代码,但无济于事.没有专门针对订阅的教程或示例.我能找到的所有答案都只针对单次购买.

我的base64键很好.新的IabHelper初始化没问题.但是当它进入订阅查询时,它很可能会失败.这是日志:

Querying owned items, item type: subs
10-25 13:52:16.957 7850-7915/com.lifelog24.main D/IabHelper: Package name: com.lifelog24.main
10-25 13:52:16.957 7850-7915/com.lifelog24.main D/IabHelper: Calling getPurchases with continuation token: null
10-25 …
Run Code Online (Sandbox Code Playgroud)

android subscription in-app-billing

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

在Mac OS X 10.8.3上编辑my.cnf后无法重新启动MySQL

我试图在我的Mac,OS X版本10.8.3上启用MySQL登录.

我搜索过的每个地方都得到了相同的答案,即将以下内容添加到my.cnf:

[mysqld]
general_log=1
log=/var/log/mysql-query.log
Run Code Online (Sandbox Code Playgroud)

然后重启mysql.

日志文件的权限是正确的,所有者是_mysql,就像所有其他MySQL文件一样.

但是,无论我尝试多少,一旦my.cnf被修改,MySQL将无法重启.它只会关闭,就是这样.通过命令行或通过首选项窗格,它不会再次启动.

我也尝试启用log vie Workbench,但只要log = ...条目进入my.cnf,MySQL就拒绝启动.我必须手动删除此条目才能启动MySQL.

有人可以指导我如何在OS X 10.8.3上启用MySQL的日志记录吗?

mysql macos logging

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

Android:无法从子模块广播到主应用程序。这是可行的吗?

我有一个主应用程序,我们将其称为“app”,然后将子模块称为“module1”和“module2”。这些模块是“应用程序”的依赖项。“app”启动“module1”,它完成其工作,完成后,它会广播一条消息,该消息应该由“app”接收,以便它可以继续其流程。但是,我似乎没有在“应用程序”中成功接收它。

我想知道,是否有可能从子模块发送广播消息?

这些模块应该尽可能保持独立于主应用程序,以便也可以与其他应用程序一起使用,例如插件。这就是为什么我没有在主应用程序的清单中添加与模块相关的任何内容。模块有自己的清单。

广播在模块内工作正常。

代码非常简单:

public class MyReceiver extends BroadcastReceiver {

mFilter = new IntentFilter("com.myapp.main.CUSTOM_INTENT");
mReceiver = new MyReceiver();

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(Constants.TAG, "receiver worked");
    }

    // constructor
    public MyReceiver(){

    }
}
Run Code Online (Sandbox Code Playgroud)

在清单中:

<receiver android:name=".MyReceiver">
        <intent-filter>
            <action android:name="com.myapp.main.CUSTOM_INTENT" />
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

在子模块中:

Intent intent = new Intent("com.myapp.main.CUSTOM_INTENT");
            intent.putExtra("value", 0);
            sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

android module broadcast

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

寻找 Core Data 到 CloudKit 公共数据库同步以及删除和订阅工作的工作示例

经过多天的尝试但没有成功后,我在这里发布这个问题,希望有人可以帮助我解决这个看起来相当简单的问题。我正在为Swift项目而不是SwiftUI执行此操作。

我的要求非常简单,我很困惑为什么苹果的文档或其他任何地方都没有明确的解决方案。我希望在我的 iOS 应用程序上有一个从 CloudKit 同步到应用程序核心数据的公共和私有数据库,反之亦然。

我已经看过 WWDC 视频和示例代码好几次了。如果他们在工作,我就不会在这里发布我的问题。

最新 WWDC2022 视频中的人正在展示 WWDC2019 视频中的代码。而且您下载的代码与他在视频中显示的代码不同。对于这样一个简单的任务来说,这个下载的代码不仅过于复杂和混乱,而且它也不处理公共数据库同步和/或订阅。苹果的教程工作太糟糕了。

经过一番努力,我也设法找到了 WWDC2019 代码,但它无法在较新的 Xcode 上编译。我正在使用 Xcode 13。我将其修复为可在 Xcode 上运行。但最终,它并没有按预期与 CloudKit 同步。

我查阅了无数的例子,但它们都已经过时了。我还没有看到一个显示最新 CloudKit 屏幕的示例。大多数示例仅讨论私有数据库同步,这是一个相当简单且直接的过程。几乎没有任何示例谈论设置订阅,更不用说公共数据库了。通过订阅设置公共数据库的唯一示例位于 Hacking With Swift 网站,但它没有讨论将 Core Data 与 CloudKit 同步,而是直接从 CloudKit 中保存和读取。

Apple 自己的示例也仅适用于私有数据库同步。

经过许多天的挣扎和挫折,我来到这里。我从各种示例中精心挑选了工作代码片段。但最终我没能让事情顺利进行。

我在下面发布我的代码。当在设备上运行时,它会在 CloudKit 上创建记录。它也应该创建订阅,但并不是每次都创建它们。即使创建了订阅,它们也不会被可靠地触发。有时他们会被解雇,有时则不会。这是CloudKit的开发环境的问题吗?我尝试过设置多个 CloudKit 容器,但这个问题仍然存在。

此外,模拟器和真实设备上的行为并不相同。在 Simulator 上,我知道您不会收到推送通知,但即使启动应用程序也不会每次都从 CloudKit 下载记录。因此,有时它会按预期工作,而有时则根本不起作用。尽管日志不断显示它们与 CloudKit 后端正在进行某种通信。

无论如何,在 CloudKit 上删除记录并不会在设备上删除它。

运行 WWDC2022 视频提供的示例也非常不稳定。它应该创建帖子项目。它确实如此,但是无论我设置私有数据库订阅还是公共数据库订阅,同步工作都非常不可靠。删除了还是不行。通知也不起作用,尽管我在我的应用程序中设置得很好appdelegate

那么,有没有可行的解决方案可供参考?任何帮助将不胜感激。

lazy var persistentContainer: NSPersistentCloudKitContainer = {
        let container = NSPersistentCloudKitContainer(name: "PublicDB")
        
        let store = …
Run Code Online (Sandbox Code Playgroud)

database core-data ios swift cloudkit

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

应用删除后,Nexus 6P上的Android Marshmallow无法清除内部存储空间

这对我来说是新的,在网上搜索一段时间失败后,我在这里发布这个问题.

我用Android Marshmallow购买了一台新的Nexus 6P设备.我注意到,当我安装一个应用程序,并删除它,然后重新安装它,但它仍然有它的旧数据.比去年多天的设备的内部存储积累了数据的30MB,我不能够删除30MB.该应用程序本身不是3MB.

我尝试了CLEAR DATA和CLEAR CACHE,删除并重新安装了应用程序,但这30MB并没有消失.我没有看到任何方法完全删除我的应用程序的数据,因为我以前可以在任何其他手机或平板电脑上.

我不知道这是新Android设备上的错误还是新功能,但是我想要摆脱所有旧数据,否则我无法在这款手机上测试我的应用程序及其过时的数据回来了.

附上截图.

在此输入图像描述

android android-6.0-marshmallow nexus-6p

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

如何在notifyChange之后更改Loader <Cursor>中的查询

我已经尝试了几个小时,但无法做到这一点.我尝试通过Bundle,通过静态变量,通过if语句发送,但没有任何工作.

我有一种情况,我希望我的Loader在用户点击菜单项后加载不同的数据集.这意味着一旦收到notifyChange,就应该更改查询.代码是非常标准的Loader代码,如下所示:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String query = args.getString("query");

    String[] projection = { DbCreate.ID, DbCreate.COL_ITEM, DbCreate.COL_STATUS, DbCreate.COL_SYNCED,
            DbCreate.COL_PRIORITY, DbCreate.COL_COMPLETEBY, DbCreate.COL_TAG, DbCreate.COL_ASSIGNED, DbCreate.COL_SHARED};

    CursorLoader cursorLoader = new CursorLoader(getActivity(),
            DbProvider.CONTENT_URI_DATA, projection, query, null, "priority DESC, status ASC, _id DESC");

    return cursorLoader;
}
Run Code Online (Sandbox Code Playgroud)

我在这个onCreate方法中尝试了通常的if(...)语句,但它不起作用.这意味着notifyChange只触发已创建的对象.那么如何在notifyChange上注入一个新的'query'值呢?

android cursor loader

3
推荐指数
1
解决办法
2147
查看次数

Kotlin使用#close后应释放此光标

使用后如何正确关闭Kotlin中的光标。我知道如何在Java中执行此操作,但是不管我在Kotlin中执行什么操作,它仍然会警告您关闭它。

我试过了:

        val cursor = context!!.getContentResolver().query(DbProvider.CONTENT_URI_VERSES, null, where, null, null)!!
        if (cursor.moveToFirst()) {
            try {
                arabicTextTV.text = cursor.getString(cursor.getColumnIndex(DbHelper.COL_ARABIC1))
            } finally {
                cursor.close()
            }
        }
Run Code Online (Sandbox Code Playgroud)

和现代的方式:

        val cursor = context!!.getContentResolver().query(DbProvider.CONTENT_URI_VERSES, null, where, null, null)!!
        if (cursor.moveToFirst()) {
            cursor.use {
                arabicTextTV.text = cursor.getString(cursor.getColumnIndex(DbHelper.COL_ARABIC1))
            }
        }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此处输入图片说明

android cursor kotlin

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