Android通过开发者控制台自动更新资源文件
我的Android应用程序在Android通过开发者控制台自动更新资源文件,android,auto-update,google-play,resource-files,Android,Auto Update,Google Play,Resource Files,我的Android应用程序在资源文件夹中有原始文件,我从中检索对我的应用程序至关重要的数据 这些资源文件需要不时更新(如果不是经常更新的话) 有没有办法通过谷歌更新机制(开发者控制台或其他工具)来实现这一点 我知道谷歌的新政策不允许通过非Playstore来源更新应用程序。 大多数时候,我只需要更新这个特定的文件,并且大部分代码保持不变(除非有bug) 我觉得让用户下载整个.apk文件只是为了更新单个原始文件是多余的 不,这是不可能的,你不应该设计这样的应用程序 我可以看到你想要什么,你想从服
资源文件夹
中有原始文件,我从中检索对我的应用程序至关重要的数据
这些资源文件需要不时更新(如果不是经常更新的话)
有没有办法通过谷歌更新机制(开发者控制台或其他工具)来实现这一点
我知道谷歌的新政策不允许通过非Playstore来源更新应用程序。
大多数时候,我只需要更新这个特定的文件,并且大部分代码保持不变(除非有bug)
我觉得让用户下载整个.apk文件只是为了更新单个原始文件是多余的 不,这是不可能的,你不应该设计这样的应用程序 我可以看到你想要什么,你想从服务器下载一些东西到客户端而不阻塞用户界面 使用某些服务器端语言构建api,如果仅更新了remote中的文件,则返回所需的文件(您可以在客户端和服务器之间进行日期时间比较,如果不同,则下载) 您可以尝试
asynctask
进行api调用,返回所需文件并将其保存在资源文件夹中
下面是一个异步任务示例
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() {}
}
}
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.provider.Settings.System;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入android.view.view.OnClickListener;
公共类AsyncTaskActivity扩展活动实现OnClickListener{
按钮btn;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(按钮)findViewById(R.id.button1);
//因为我们实现了OnClickListener,所以我们只需要传递“this”
//(容易多了)
btn.setOnClickListener(此);
}
公共void onClick(视图){
//检测“单击”的视图
开关(view.getId()){
案例R.id.button1:
新建LongOperation()。执行(“”);
打破
}
}
私有类LongOperation扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
对于(int i=0;i<5;i++){
试一试{
睡眠(1000);
}捕捉(中断异常e){
Thread.interrupted();
}
}
返回“已执行”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
TextView txt=(TextView)findViewById(R.id.output);
txt.setText(“已执行”);//txt.setText(结果);
//可能需要更改传递的返回字符串的“已执行”
//进入onPostExecute(),但这取决于您
}
@凌驾
受保护的void onPreExecute(){}
}
}
我希望这可以解决您的问题您可以将文件托管在web服务器上,并将其下载到应用程序的专用目录或外部存储。什么是“应用程序的专用目录”???有没有一种方法可以在编写应用程序时使用私有目录文件?您可以使用“Context.getFilesDir()”获取指向应用程序私有位置的路径。我可以从服务器下载新文件,并使用Context.getFilesDir()将其放在适当的位置。这回答了我的问题。谢谢没有。我知道如何在Android中使用线程。通过服务器更新是其中一种方法,但我如何在我的应用程序中使用该特定文件。在开发过程中,我将这样的文件放在resource->raw->file.f中。一旦部署了应用程序,这个资源文件夹将在哪里?@SreecharanDesabattula您不能写入resources目录正如我指出的,我需要某种方法从应用程序更新一个文件,并且该文件应该是应用程序的私有文件。不一定是资源目录。谢谢