AndroidWidget实践 --- EverydayTips开发(5)

把从TXT文本中选取任意警句实现了

个人认为挺好懂 就不过多解释了


注意 我把tips.txt放 assets文件夹了


package com.su.tipeveryday;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.content.Context;
import android.content.res.AssetManager;
import android.util.Log;
import android.widget.Toast;

public class Tips {
	static final String DATA_PATH = "/mnt/sdcard/Android/TipEveryDay/";
	public static Boolean flagBoolean = true;
	private static List<String> tips = new ArrayList<String>();

	public static void intiFile(Context context) {
		File path = new File(DATA_PATH);// 建立系統目錄
		if (!path.exists()) {
			path.mkdirs();
		}
		File fileTip = new File(DATA_PATH + "tips.txt");
		if (!fileTip.exists()) {
			Log.i("FFFFFFFfff", "121");
			copyAssets(context);//如果没有TXT文件就从assets中copy

		}

	}

	public static String getTips() {
		File fileTip = new File(DATA_PATH + "tips.txt");
		BufferedReader reader = null;
		if (tips.isEmpty()) {//为了性能考虑 只读取一次txt
			try {
				reader = new BufferedReader(new FileReader(fileTip));
				String tempString = null;
				while ((tempString = reader.readLine()) != null) // 将文件中用户信息存储与数组用于输出
				{
					Log.i(" ", tempString);
					tips.add(tempString);//把所有的句子放到tips中 用的时候取出

				}
				reader.close();
			}

			catch (IOException e) {
				e.printStackTrace();
			}

		}

		int r = (int) (Math.random() * tips.size());// 随机选取一个句 
		return tips.get(r);

	}

	private static void copyAssets(Context context) {//copy Assets的方法

		AssetManager assetManager = context.getAssets();
		String[] files = null;
		try {
			files = assetManager.list("");
		} catch (IOException e) {

		}
		for (int i = 0; i < files.length; i++) {
			InputStream in = null;
			OutputStream out = null;
			try {
				if (!(new File(Tips.DATA_PATH + files[i])).exists()) {
					in = assetManager.open(files[i]);
					out = new FileOutputStream(Tips.DATA_PATH + files[i]);
					Tips.copyFile(in, out);
					in.close();
					in = null;
					out.flush();
					out.close();
					out = null;
				}
			} catch (Exception e) {
			}
		}
	}

	public static void copyFile(InputStream in, OutputStream out)
			throws IOException {
		byte[] buffer = new byte[1024];//做了个缓冲流
		int read;
		while ((read = in.read(buffer)) != -1) {
			out.write(buffer, 0, read);
		}
	}
}

然后我们加上配置刷新时间的操作 还有分享按钮 基本功能就差不多了

这是最后的Activity


package com.su.tipeveryday;

import android.app.Activity;
import android.app.AlertDialog;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class TipEveryDayActivity extends Activity {

	int mAppWidgetId;
	private EditText editText;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Log.i("myLog", " on WidgetConf ... ");
		editText = (EditText) findViewById(R.id.editTextTip);

		Tips.intiFile(TipEveryDayActivity.this);
		setResult(RESULT_CANCELED);

		// Find the widget id from the intent.
		Intent intent = getIntent();

		String tip = intent.getStringExtra("TIP");// 获取传来的值
		editText.setText(tip);

		Bundle extras = intent.getExtras();
		if (extras != null) {
			mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
					AppWidgetManager.INVALID_APPWIDGET_ID);
			Log.i("TTTTT", mAppWidgetId + "");// 这个返回的屏幕上的widgetID,没增加一个会加一
												// 我的模拟器是19,应该是有保留ID?

		}
		Intent resultValue = new Intent();
		resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); // 感觉这里的mAppWidgetId
																					// 应该是和控制知道widget有关稍后研究
		Button buttonShare = (Button) findViewById(R.id.buttonShare);
		buttonShare.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent(Intent.ACTION_SEND);
				intent.setType("text/plain");
				intent.putExtra(Intent.EXTRA_SUBJECT, "来自桌面警语的分享");
				intent.putExtra(Intent.EXTRA_TEXT, editText.getText()
						.toString());
				startActivity(Intent.createChooser(intent, getTitle()));

			}
		});
		if (tip == null) {
			setResult(RESULT_OK, resultValue);
			finish();
		}

		setResult(RESULT_OK, resultValue);

	}

	private static final int TOOLBAR0 = 0;
	private static final int TOOLBAR1 = 1;

	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, TOOLBAR0, 1, "刷新时间").setIcon(
				android.R.drawable.ic_menu_recent_history);
		menu.add(0, TOOLBAR1, 2, "退出程序").setIcon(
				android.R.drawable.ic_lock_power_off);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case 0:
			showTimeDialog();
			break;
		case 1:
			android.os.Process.killProcess(android.os.Process.myPid());
			break;
		}

		return super.onOptionsItemSelected(item);

	}

	protected void showTimeDialog() {

		final EditText et = new EditText(TipEveryDayActivity.this);
		AlertDialog.Builder ad1 = new AlertDialog.Builder(
				TipEveryDayActivity.this);
		ad1.setTitle("刷新时间:");
		ad1.setIcon(android.R.drawable.ic_dialog_info);
		ad1.setView(et);
		ad1.setPositiveButton("是", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int i) {
				
				startService(new Intent(TipEveryDayActivity.this, TipService.class));
				
				SharedPreferences settings = TipEveryDayActivity.this
						.getSharedPreferences("time", Context.MODE_PRIVATE);
				SharedPreferences.Editor editor = settings.edit();
				editor.putString("time", et.getText().toString());
				editor.commit();

			}
		});
		ad1.setNegativeButton("否", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int i) {

			}
		});
		ad1.show();// 显示对话框

	}
}



你可能感兴趣的:(android)