我目前正在使用一个小部件,该小部件需要能够读取文件的内容并在更新时显示它们。我找不到足够的合适信息来执行此操作。我知道如何读写内部存储文件,我只是不知道如何通过更新服务将其传递。我仍然对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);
}
}