Android通过开发者控制台自动更新资源文件

时间:2014-07-26 11:51:43

标签: android auto-update google-play resource-files

我的Android应用程序在resource folder中有原始文件,我从中检索对我的应用程序至关重要的数据。

如果不经常,这些资源文件需要不时更新。

有没有办法通过Google更新机制(开发者控制台或任何其他工具)实现这一目标?

我知道Google的新政策不允许通过非Playstore来源更新应用。 Google's new policy

大多数情况下,我只需更新此特定文件,大部分代码保持不变(除非有错误)。

我觉得让用户下载整个.apk文件只是为了更新单个原始文件是多余的。

1 个答案:

答案 0 :(得分:2)

不可能,你不应该设计这样的应用程序。

我可以看到你想要的东西,你想从服务器下载一些东西而不阻止UI。

使用某种服务器端语言构建api,如果只更新了远程文件,则返回所需的文件(您可以在客户端和服务器之间进行日期时间比较,如果不同,则下载它)

您可以尝试asynctask进行api调用,返回您想要的文件并将其保存在资源文件夹中。

以下是asynctask示例

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings.System;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class AsyncTaskActivity extends Activity implements OnClickListener {

    Button btn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button) findViewById(R.id.button1);
        // because we implement OnClickListener we only have to pass "this"
        // (much easier)
        btn.setOnClickListener(this);
    }

    public void onClick(View view) {
        // detect the view that was "clicked"
        switch (view.getId()) {
        case R.id.button1:
            new LongOperation().execute("");
            break;
        }
    }

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

        @Override
        protected String doInBackground(String... params) {
            for (int i = 0; i < 5; i++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.interrupted();
                }
            }
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
            TextView txt = (TextView) findViewById(R.id.output);
            txt.setText("Executed"); // txt.setText(result);
            // might want to change "executed" for the returned string passed
            // into onPostExecute() but that is upto you
        }

        @Override
        protected void onPreExecute() {}
    }
}

我希望这能解决你的问题