如何在窗口小部件和活动之间共享私有文件?

时间:2013-03-23 17:32:38

标签: java android file widget

我知道我可以在活动和文件名中使用getFilesDir()来保存/读取文件。但是,当我尝试从小部件中调用getFilesDir()时,我收到错误。我希望能够从小部件和活动中访问相同的文本文件。

实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用getFilesDir()中的Context所以您可以保存\从Application读取您的文件。

修改

您必须从Application扩展一个类并使用它的上下文:

public class App extends Application{

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    public static Context getContext(){
        return mContext;
    }
}

然后在您的应用的manifest中,将name标记的Application属性设置为该类的名称,例如:

android:name="App"

注意:App是扩展Application的该类的名称。

现在您可以使用它的上下文来执行save \ read:

App.getContext().getFilesDir();

答案 1 :(得分:1)

您可以使用AssetManager来实现此目的。这是一个简短的例子:

AssetManager assetManager = getAssets(); 
String[] files = assetManager.list("Files");
InputStream input = assetManager.open("helloworld.txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
String text = new String(buffer);

更新:抱歉,您忘记要在小部件中使用此功能。您可以尝试this answer中的此代码:

InputStream is = mContext.getAssets().open(someFile);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));

警告:请勿按原样使用此代码。你应该使用适当的代码来捕获错误和边缘情况。