SyncAdapter periodsync() 未触发

2024-03-13

我正在尝试弄清楚syncAdapter是如何工作的,我使用sampleSync Adapter作为示例/起点,并基于它进行了我的第一次测试。唯一的区别是我不使用默认的联系人提供程序,但我需要自己的联系人提供程序之一。

此方法与 SampleSyncAdapter 演示(在 AccountAuthenticatorActivity 中)中的方法有点相同,我刚刚添加了定期同步。

    public void finishLogin(String authToken) {
    Log.i(TAG, "finishLogin()");
    final Account account = new Account(mUsername, "be.company.syncAdapterTest");
    if(mRequestNewAccount) {
        mAccountManager.addAccountExplicitly(account, mPassword, null);
        ContentResolver.setIsSyncable(account, MY_AUTHORITY, 1);

        Bundle params = new Bundle();
        params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);           
        ContentResolver.addPeriodicSync(account, MY_AUTHORITY, params, 30);
        ContentResolver.setSyncAutomatically(account, MY_AUTHORITY, true);
        ContentResolver.requestSync(account,MY_AUTHORITY,params);
    } else {
        mAccountManager.setPassword(account, mPassword);
    }
    final Intent intent = new Intent();
    intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, "ACCOUNT_TEST");
    intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, "be.company.syncAdapterTest");
    setAccountAuthenticatorResult(intent.getExtras());
    setResult(RESULT_OK, intent);
    finish();
}

在 perfomSync() 方法中,我有以下方法:

    @Override
public void onPerformSync(Account account, Bundle extras, String authority,
        ContentProviderClient provider, SyncResult syncResult) {
    Log.d(TAG, "onPerformSync() start");
    // Testje
    try {
        final String authToken = mAccountManager.blockingGetAuthToken(account, "be.company.syncAdapterTest", NOTIFY_AUTH_FAILURE);
        Log.d(TAG, SAPNetworkUtilities.getWeek(account, authToken, getRandomDate()));
    } catch (OperationCanceledException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (AuthenticatorException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Log.d(TAG, "onPerformSync() end");
}

这里我只是调用一个简单的 SAP Web 服务并将其显示在日志中。现在我有以下两个问题:

  1. 当我在设置中添加我的帐户时,SYNC 不会自动启动。我需要进入帐户并选中复选框才能开始同步?
  2. 在本例中,同步并不是每 30 秒触发一次...我是否需要在 perfomSync() 方法中添加一些内容,以便让系统知道同步已完成并且可以开始下一次运行?

目前,我没有在 contentProvider 中写入值,只是因为我试图弄清楚同步的详细工作原理。

目前我正在Android模拟器上进行测试。

预先感谢您的反馈。

亲切的问候,

Robin


我还在努力与同步适配器进行定期同步。我可以使用请求同步手动触发我的 SyncAdapter,但添加PeriodicSync 不会触发。

我注意到在all在这些示例中,进入“设置”->“帐户”会显示 SyncAdapter 的帐户,其中有一个小“同步轮”(如果同步正常则通常为绿色;如果最近同步失败则为红色)以及“上次同步”时间戳。我的帐户(从谷歌文档 http://developer.android.com/training/sync-adapters/creating-authenticator.html)没有列出任何类似同步轮或时间戳的内容。

进一步挖掘暴露了问题所在:我的内容提供商没有label在它的 XML 中(我之前使用它没有任何问题,所以我浏览了文档的这一部分)。为我的内容提供商添加一个简单的标签,使其显示在“设置”中我的帐户下,以及同步轮和时间戳。

以下是从我的应用程序中获取灵感的一些代码。希望它能帮助某人、某处!

/res/xml/sync_adapter.xml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.example.database"
android:allowParallelSyncs="false"
android:contentAuthority="com.example.database.data.provider"
android:isAlwaysSyncable="true"
android:supportsUploading="false"
android:userVisible="true" />

/com/example/database/data/MySyncAdapter

public class MySyncAdapter extends AbstractThreadedSyncAdapter {
    private static final String TAG = MySyncAdapter.class.getSimpleName();
    Context context;

    public MySyncAdapter(Context context, boolean autoInitialize) {
        super(context, autoInitialize);
        this.context = context;
    }

    public MySyncAdapter(Context context, boolean autoInitialize, boolean allowParallelSyncs) {
        super(context, autoInitialize, allowParallelSyncs);
        this.context = context;
    }

    @Override
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) {
        Log.e(TAG, "Performing Sync");
    }
}

AndroidManifest.xml(内容提供商需要标签才能显示在帐户中)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.database">

    <uses-sdk tools:node="replace" />

    <uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
    <uses-permission android:name="android.permission.READ_SYNC_STATS" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:logo="@drawable/chef_collection_logo_white"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <provider
            android:name="com.example.database.data.MyContentProvider"
            android:authorities="com.example.database.data.provider"
            android:label="my provider"
            android:exported="false"
            android:multiprocess="true"
            android:syncable="true" />

        <activity
            android:name=".app.MainActivity"
            android:label="@string/title_activity_main">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name="com.example.database.data.AuthenticatorService"
            android:exported="true"
            android:process=":auth">
            <intent-filter>
                <action android:name="android.accounts.AccountAuthenticator" />
            </intent-filter>
            <meta-data
                android:name="android.accounts.AccountAuthenticator"
                android:resource="@xml/authenticator" />
        </service>

        <service
            android:name="com.example.database.data.MySyncAdapterService"
            android:exported="true"
            android:process=":sync">
            <intent-filter>
                <action android:name="android.content.SyncAdapter" />
            </intent-filter>
            <meta-data
                android:name="android.content.SyncAdapter"
                android:resource="@xml/sync_adapter" />
        </service>

    </application>

</manifest>

主要活动。我在首次运行设置向导后调用此代码,但您可以在任何地方调用它。这将尝试同步每个30秒(用于测试)。请注意,谷歌文档目前是错误的,因为它提到它需要毫秒而不是秒。另一件需要注意的事情是您不能将 null 作为包传递。这样做会抛出 IllegalArgumentException 或类似的异常。

//Create Account
mAccount = createSyncAccount(this);


//Turn on periodic syncing
ContentResolver resolver = getContentResolver();
resolver.setIsSyncable(mAccount, AUTHORITY, 1);
resolver.setSyncAutomatically(mAccount, AUTHORITY, true);

resolver.addPeriodicSync(
        mAccount,
        AUTHORITY,
        Bundle.EMPTY,
        30);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SyncAdapter periodsync() 未触发 的相关文章

  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • 如何重试已消耗的 Observable?

    我正在尝试重新执行失败的已定义可观察对象 一起使用 Retrofit2 和 RxJava2 我想在单击按钮时重试特定请求及其订阅和行为 那可能吗 service excecuteLoginService url tokenModel Ret
  • 卸载后 Web 应用程序不显示“添加到主屏幕”

    这是我第一次创建网络应用程序 我设法解决了这个问题 所以我得到了实际的 chrome 提示 将其添加到主屏幕 然后我从手机上卸载了该网络应用程序 因为我想将其展示给我的同事 但是 屏幕上不再出现提示 问题 这是有意为之的行为还是我的应用程序
  • 谷歌坐标认证

    当我尝试连接到 Google 坐标时 总是出现异常GoogleAuthException 我拥有 Google 地图协调中心许可证 我确实使用我的包应用程序名称和 SHA1 在 google 控制台中创建了我的客户端 ID 我将权限添加到清
  • 如何在android中获取Camera2 API的当前曝光

    In android hardware Camera旧的 我使用下面的代码获取当前曝光并获取它Camera Camera Parameters param mCamera getParameters currentExposure para
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 无法访问 com.google.android.gms.internal.zzbfm 的 zzbfm 类文件未找到

    我正在将我的 Android 应用程序项目从GCM to FCM 为此 我使用 Android Studio 中的 Firebase 助手工具 并遵循 Google 开发人员指南中的说明 一切都很顺利 并将我的应用程序代码更改为FCM根据助
  • 在gradle插件中获取应用程序变体的包名称

    我正在构建一个 gradle 插件 为每个应用程序变体添加一个新任务 此新任务需要应用程序变体的包名称 这是我当前的代码 它停止使用最新版本的 android gradle 插件 private String getPackageName
  • 你的CPU不支持NX

    我刚刚下载了 android studio 但是我遇到了一个问题 当我运行它时 它说你的 cpu 不支持 NX 我应该怎么办 NX 或实际上是 NX 处理器位 是处理器的一项功能 有助于保护您的 PC 免受恶意软件的攻击 当此功能未启用并且
  • Ubuntu 16.04 - Genymotion:找不到 /dev/hw_random

    I install Genymotion on the Ubuntu 16 04 64Bit I created a virtual emulator for Android 6 0 then I run this emulator but
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 如何使用InputConnectionWrapper?

    我有一个EditText 现在我想获取用户对此所做的所有更改EditText并在手动将它们插入之前使用它们EditText 我不希望用户直接更改中的文本EditText 这只能由我的代码完成 例如通过使用replace or setText
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 在 android DatePickerDialog 中将语言设置为法语

    有什么办法可以让日期显示在DatePickerDialog用法语 我已经搜索过这个但没有找到结果 这是我的代码 Calendar c Calendar getInstance picker new DatePickerDialog Paym
  • 错误:在根项目“projectName”中找不到项目“app”

    我有一个在 Eclipse 中开发的旧应用程序 现在尝试将其迁移到 Android Studio 我更新了库并遵循了基本步骤 现在 我收到此错误 Error Project app not found in root project pro
  • Android:膨胀布局时出现 StackOverFlowError 和 InvokingTargetException

    首先 对不起我的英语 我在膨胀布局时有一个问题 我有一个自定义视图 从 LinearLayout 扩展而来 称为按钮帮助 我在名为的布局上使用该视图加载活动 我的以下代码在所有设备和模拟器上都能完美运行 但具有 QVGA 屏幕 例如 Sam
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐

  • 使用 C# 进行声音合成

    C 是否有可能生成声音 我的意思不仅仅是发出蜂鸣声或打开并播放波形文件 我的意思是使用不同类型的波 正弦波 锯齿波等 及其选项 频率 幅度等 构建信号 查看NAudio https github com naudio NAudio在 Git
  • SQL 列中的 XML:无法调用 nvarchar(max) 上的方法

    我有一个 sql 查询 该查询在我的列名上出现错误 提示 无法调用 nvarchar max 上的方法 SELECT LEARNER COURSE XML TEST XML EX Query declare namespace x http
  • 按 Javascript 数组中出现的次数(计数)排序

    我是 Jquery 和 Javascript 的新手 有人可以帮我根据数组中出现的次数 计数 进行 Jquery 排序吗 我尝试了各种排序方法 但没有一个有效 我有一个 Javascript 数组 它是 allTypesArray 4 4
  • 自定义SeekBar的矩形边缘[重复]

    这个问题在这里已经有答案了 我已经定制了SeekBar用一个分层绘制 drawable工作正常 但是用作背景的drawable在角处变成圆角 两个角 这里只显示右端 当拇指移动到最左边时 左角也变圆 注意 原始图像是矩形的 我怎样才能把它变
  • 在 iOS 中测量/计算距离

    我需要计算 iOS 中两点之间的距离 我可以保证至少有一部iPhone 4 所以相机的图像质量应该很好 这个想法是使用图片计算到某个点的距离 有一个名为 easyMeasure 的应用程序 它完全可以满足我的需要 我对毕达哥拉斯很满意 但这
  • 将简单的服务器代码部署到 Heroku

    我最近访问了 heroku com 网站并尝试在那里部署我的第一个 Java 程序 实际上我使用他们的 Java 部署教程有了一个良好的开端 并且运行正常 现在我有一个需要在那里部署的服务器代码 我尝试遵循该示例 但我有一些问题 例如 1
  • 邮递员 - 为每个请求覆盖用户代理

    我有一个网站 只有在基本身份验证登录后才能访问 您可以使用特定的用户代理绕过它 有没有办法始终将新请求的用户代理设置为某个值 目前它被硬编码为PostmanRuntime 7 29 0 目前 我总是为每个请求手动设置它 但这会减慢工作流程
  • Hedera 上几乎相同的交易中“gasUsed”值存在巨大差异 - 为什么?

    我注意到所使用的气体量之间存在差异 通过交易几乎是相同的 我正在调用智能合约 连续两次使用相同的参数 两者之间的唯一区别 是我正在设置gasLimit到精确值 由返回eth estimateGas在第一个中 我正在设置gasLimit to
  • 如何不需要用户输入 install.packages(type = "both")

    通常情况下 install packages type both 如果有需要从源代码构建的包 则需要用户输入 例如 目前 R 3 5 1 install packages c feather tidyr type both 将从二进制安装
  • 如何更新 bitbucket 上的拉取请求?

    如何在本地计算机上的 IDE 中的 bitbucket 上更新您自己的拉取请求之一 此工作流程没有按我的预期工作 克隆你的叉子 检查您用于拉取请求的分支 做出改变 git 添加 git 提交 推送提交 到您的分叉存储库 到目前为止一切顺利
  • MenuStrip 无法获得负载焦点

    我会尽可能准确 我有一个主表单 我们将在 Form1 中将其称为 Form1 用户可以通过菜单条启动另一个表单 在 Form2 中将其称为 Form2 我有另一个菜单条和一个数据网格视图 我的问题是 当用户启动 Form2 时 我必须在菜单
  • R函数将对象转换为代码

    我正在 R 中寻找一个函数 它将对象转换为可用于创建该对象的副本的代码 像这样的事情 gt myObject c 1 2 3 gt magicFunction myObject 1 c 1 2 3 我认为这个功能是存在的 但我找不到它 非常
  • 使用 Nginx 服务器设置 Symfony

    我的项目需要使用 Nginx 服务器设置 symfony 我之前曾将 Symfony 与 Apache 一起使用 目前我已按照此处提到的步骤进行操作 但不知何故它运行不正常 Update nginx wiki 现在包含symfony 1 4
  • Javascript eval() 和附加脚本标签之间的区别

    我想知道是否有人可以解释使用 Javascript 的 eval 和另一种方法之间的区别 例如使用 JQuery 创建脚本标签 然后将该元素附加到页面 eval somecode vs appendTo head 不确定这是否相关 但上下文
  • 如何让 Ohai 插件生成 ['etc']['passwd']?

    我已将 Chef 客户端从14 0 to 15 3 14但每当我在我的节点 macOS Mojave 上执行 Chef client 时 就会出现问题 客户端输出是 undefined method for nil NilClass Coo
  • CUDA:同步线程

    几乎在我读到的有关 CUDA 编程的任何地方都提到了 warp 中的所有线程都执行相同操作的重要性 在我的代码中 我遇到了无法避免某种条件的情况 它看起来像这样 some math code calculating d1 d2 if d1
  • 编译启用位码的 iOS 库

    我需要发布一个启用了位码的框架 但这很麻烦 我将项目设置中的 启用位码 设置为 是 它可以为真实设备和模拟器干净地构建 我想测试这个库 所以我将它集成到我为此目的创建的新应用程序中 但现在它只为模拟器构建 当我尝试为真实设备构建时 我得到
  • 插入包含撇号(单引号)的数据时MySQL出错?

    当我插入查询包含引号时 例如Kellog s 插入记录失败 错误信息 您的 SQL 语法有错误 检查手册 与您的 MySQL 服务器版本相对应 以便使用正确的语法 靠近 s 玉米片 170g 15 90 15 90 14 10 at 第 1
  • 如何在调试模式下运行 Apache Tomcat 8?

    我正在尝试在调试模式下运行 Apache Tomcat 8 0 21 当我发出命令时 sh catalina sh jpda start 它给出了这个错误 错误信息 错误 无法两次加载此 JVM TI 代理 请检查您的 java 命令 重复
  • SyncAdapter periodsync() 未触发

    我正在尝试弄清楚syncAdapter是如何工作的 我使用sampleSync Adapter作为示例 起点 并基于它进行了我的第一次测试 唯一的区别是我不使用默认的联系人提供程序 但我需要自己的联系人提供程序之一 此方法与 SampleS