如何使Asynctask等待直到收到GCM广播

时间:2015-08-20 06:27:10

标签: android android-asynctask google-cloud-messaging android-broadcast

我正在使用以下代码为GCM注册我的设备

private class GetGcmRegId extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pdia = new ProgressDialog(LoginActivity.this);
        pdia.setMessage("Please Wait...");
        pdia.setCancelable(false);
        pdia.setCanceledOnTouchOutside(false);
        pdia.show();
    }

    @Override
    protected String doInBackground(Void... params) {
        GCMRegistrar.register(LoginActivity.this, Utility.SENDER_ID);
        regid = GCMRegistrar.getRegistrationId(LoginActivity.this);
        return regid;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        pdia.dismiss();
        regid = result;
        System.out.println("regid ==========>"+regid);
    }
}

现在,我知道的一件事是我将通过广播获得注册ID。但是,我怎么能让这个asynctask等到广播收到呢?

目前,此代码System.out.println("regid ==========>"+regid); 什么都不打印,但是当我第二次运行活动时,我收到了注册ID;

1 个答案:

答案 0 :(得分:0)

在我看来,你不必等待。请参阅我的以下示例代码。希望这有帮助!

首先,我检查SharedPreferences,如果为空,则从Google服务器获取令牌(设备注册ID)。令牌将存储在SharedPreferences中供其他用途/提供给服务器端应用程序。

$db = db::getInstance();
$db->func('SELECT `id` FROM `table` WHERE `name` = ?');
// prints out 'example: successful '