1

我正在寻找几天的解决方案。我搜索了很多帖子,但我没有找到我的问题的答案。我正在为我的应用程序使用 GCM 网络管理器,如果我所做的正确,我遵循了几个教程。一切似乎都正确,但是当我调用 GcmNetworkManager.getInstance(Context context) 时,它返回 null。然后,当我调用一次性任务时,它什么也不做。我没有收到任何错误,但没有任何反应。这是代码:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_awesome_activity);

    gcmNetworkManager = GcmNetworkManager.getInstance(this);

    WardrobeElement newElement = new WardrobeElement(1, 3, 'test');

    Bundle extras = new Bundle();
    extras.putSerializable(Constants.SERIALIZED_WARDROBE_ELEMENT_KEY, newElement);

    Task task = new OneoffTask.Builder()
                    .setService(GCMService.class)
                    .setExecutionWindow(0, 30)
                    .setTag(Constants.MY_TAG)
                    .setUpdateCurrent(false)
                    .setRequiredNetwork(Task.NETWORK_STATE_CONNECTED)
                    .setRequiresCharging(false)
                    .setExtras(extras)
                    .build();

    gcmNetworkManager.schedule(task);

    //gcmNetworkManager = null
}

在我的清单中:

<service android:name="fr.hexus.dresscode.classes.GCMService"
    android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE"
    android:exported="true">
    <intent-filter>
        <action android:name="com.google.android.gms.gcm.ACTION_TASK_READY"/>
    </intent-filter>
</service>

还有我实现 GCM 网络管理器的课程:

public class GCMService extends GcmTaskService
{
    @Override
    public int onRunTask(TaskParams taskParams)
    {
        if(Constants.MY_TAG.equals(taskParams.getTag()))
        {
            final Bundle extras = taskParams.getExtras();
            final WardrobeElement currentElement = (WardrobeElement) extras.getSerializable(Constants.SERIALIZED_WARDROBE_ELEMENT_KEY);

            try
            {
                currentElement.sendWardrobeElementToTheAPI();
                return GcmNetworkManager.RESULT_SUCCESS;

            } catch(CallException exception)
            {
                return GcmNetworkManager.RESULT_RESCHEDULE;
            }
        }

        return 0;
    }
}

我希望你能帮助我找到解决这个问题的方法。

谢谢

编辑:我通过用 Firebase Job Dispatcher 替换 GCM 网络管理器解决了我的问题,它几乎相同,但它对我有用。我怀疑 GCM 网络管理器不再兼容,因为它自 2018 年 4 月以来已被弃用。Firebase Job Dispatcher 似乎是它的替代品。

4

0 回答 0