如何从内部存储文件更新小部件

时间:2019-11-29 21:12:45

标签: widget text-files android-internal-storage

我目前正在使用一个小部件,该小部件需要能够读取文件的内容并在更新时显示它们。我找不到足够的合适信息来执行此操作。我知道如何读写内部存储文件,我只是不知道如何通过更新服务将其传递。我仍然对Android编程还很陌生,因此我尝试了许多事情,但并没有真正100%理解我在做什么,因此请原谅凌乱的代码或任何看起来没有意义的代码。为了对其进行测试,我的主要活动是创建并写入内部存储文件。迫切需要并且非常欢迎您提供建设性的反馈代码和详细的说明。下面的代码。

我尝试使用服务从我的应用程序提供程序类中的文件更新:

public class WidgetProvider extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        context.startService(new Intent(context, UpdateService.class));
        super.onUpdate(context,appWidgetManager,appWidgetIds);

        for (int count=0;count<appWidgetIds.length;count++){
            RemoteViews appWidgetLayout = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
            Intent intent=new Intent(context,MainActivity.class);
            PendingIntent pendingIntent=PendingIntent.getActivity(context,0,intent,0);
            appWidgetLayout.setOnClickPendingIntent(R.id.update,pendingIntent);
            appWidgetManager.updateAppWidget(appWidgetIds[count],appWidgetLayout);

        }


    }
    public static class UpdateService extends Service {

        @Override
        public void onStart(Intent intent, int startId) {
            // Build the widget update for today
            RemoteViews updateViews = buildUpdate(this);
            // Push update for this widget to the home screen
            ComponentName thisWidget = new ComponentName(this, UpdateService.class);
            AppWidgetManager manager = AppWidgetManager.getInstance(this);
            manager.updateAppWidget(thisWidget, updateViews);

        }
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
        public RemoteViews buildUpdate(Context context){
            String FILENAME="testfile.txt";

            StringBuilder stringBuilder=new StringBuilder();
                try {
                    InputStream inputStream = openFileInput(FILENAME);
                    if (inputStream != null) {
                        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                        String newLine = null;
                        while ((newLine = bufferedReader.readLine()) != null) {
                            stringBuilder.append(newLine + "\n");
                        }
                        inputStream.close();
                        Toast.makeText(this,"Read Successful",Toast.LENGTH_LONG).show();
                    }
                }catch(java.io.IOException e){
                    e.printStackTrace();
                }
                RemoteViews views = null;
                views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
                views.setTextViewText(R.id.update,stringBuilder.toString());

        return views;
        }
    }

这是我的主要活动课:

public class MainActivity extends AppCompatActivity {
    private final String FILENAME="testfile.txt";
    EditText mEditText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mEditText= (EditText)findViewById(R.id.editText);
    }

    public void writeFile(View view){
        try{
            FileOutputStream fileOutputStream= openFileOutput(FILENAME, Context.MODE_PRIVATE);
            fileOutputStream.write(mEditText.getText().toString().getBytes());
            fileOutputStream.close();
            Toast.makeText(this,"Write Successful",Toast.LENGTH_LONG).show();
        }catch (java.io.IOException e){
            e.printStackTrace();
        }
    }

    public void readFile(View view){
        StringBuilder stringBuilder=new StringBuilder();
        try {
            InputStream inputStream = openFileInput(FILENAME);
            if (inputStream != null) {
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String newLine = null;
                while ((newLine = bufferedReader.readLine()) != null) {
                    stringBuilder.append(newLine + "\n");
                }
                inputStream.close();
                Toast.makeText(this,"Read Successful",Toast.LENGTH_LONG).show();
            }
        }catch(java.io.IOException e){
            e.printStackTrace();
        }
        mEditText.setText(stringBuilder);
    }
}

0 个答案:

没有答案