当前位置:   article > 正文

小米开源便签Notes-源码研究(1)-导出功能整体思路_小米便签开源代码note类精读

小米便签开源代码note类精读

NotesListActivity是入口Activity。


响应菜单事件,我的手机是“左键菜单”。
如果菜单项的ID是“R.id.menu_export_text”,就执行导出,保存到/mnt/sdcard/MIUI/notes目录下。
  1. @Override
  2. public boolean onOptionsItemSelected(MenuItem item) {
  3. switch (item.getItemId()) {
  4. case R.id.menu_new_folder: {
  5. showCreateOrModifyFolderDialog(true);
  6. break;
  7. }
  8. case R.id.menu_export_text: {
  9. exportNoteToText();
  10. break;
  11. }
  12. case R.id.menu_sync: {
  13. if (isSyncMode()) {
  14. if (TextUtils.equals(item.getTitle(),
  15. getString(R.string.menu_sync))) {
  16. GTaskSyncService.startSync(this);
  17. } else {
  18. GTaskSyncService.cancelSync(this);
  19. }
  20. } else {
  21. startPreferenceActivity();
  22. }
  23. break;
  24. }
  25. case R.id.menu_setting: {
  26. startPreferenceActivity();
  27. break;
  28. }
  29. case R.id.menu_new_note: {
  30. createNewNote();
  31. break;
  32. }
  33. case R.id.menu_search:
  34. onSearchRequested();
  35. break;
  36. default:
  37. break;
  38. }
  39. return true;
  40. }



NotesListActivity中的导出方法。
传入上下文,获得备份工具类BackupUtils的一个实例(单例)。
然后,新建一个异步任务AsyncTask,执行具体的备份功能。
后台方法执行在doInBackground,调用BackupUtils的exportToText方法。
onPostExecute给出用户反馈,3种情况:
a.SDCard没有挂在,警告对话框AlertDialog提示出错。
b.STATE_SYSTEM_ERROR,运行时错误。
c.成功,(*^__^*) 。
  1. private void exportNoteToText() {
  2. final BackupUtils backup = BackupUtils
  3. .getInstance(NotesListActivity.this);
  4. new AsyncTask<Void, Void, Integer>() {
  5. @Override
  6. protected Integer doInBackground(Void... unused) {
  7. return backup.exportToText();
  8. }
  9. @Override
  10. protected void onPostExecute(Integer result) {
  11. if (result == BackupUtils.STATE_SD_CARD_UNMOUONTED) {
  12. AlertDialog.Builder builder = new AlertDialog.Builder(
  13. NotesListActivity.this);
  14. builder.setTitle(NotesListActivity.this
  15. .getString(R.string.failed_sdcard_export));
  16. builder.setMessage(NotesListActivity.this
  17. .getString(R.string.error_sdcard_unmounted));
  18. builder.setPositiveButton(android.R.string.ok, null);
  19. builder.show();
  20. } else if (result == BackupUtils.STATE_SUCCESS) {
  21. AlertDialog.Builder builder = new AlertDialog.Builder(
  22. NotesListActivity.this);
  23. builder.setTitle(NotesListActivity.this
  24. .getString(R.string.success_sdcard_export));
  25. builder.setMessage(NotesListActivity.this.getString(
  26. R.string.format_exported_file_location,
  27. backup.getExportedTextFileName(),
  28. backup.getExportedTextFileDir()));
  29. builder.setPositiveButton(android.R.string.ok, null);
  30. builder.show();
  31. } else if (result == BackupUtils.STATE_SYSTEM_ERROR) {
  32. AlertDialog.Builder builder = new AlertDialog.Builder(
  33. NotesListActivity.this);
  34. builder.setTitle(NotesListActivity.this
  35. .getString(R.string.failed_sdcard_export));
  36. builder.setMessage(NotesListActivity.this
  37. .getString(R.string.error_sdcard_export));
  38. builder.setPositiveButton(android.R.string.ok, null);
  39. builder.show();
  40. }
  41. }
  42. }.execute();
  43. }



接下来深入看
BackupUtils的导出方法。
  1. public int exportToText() {
  2. return mTextExport.exportToText();
  3. }


mTextExport是一个静态内部类。

具体的导出逻辑如下:
1.从内容提供器ContentProvider中查询,根目录下的文件夹,
  备份文件夹和文件夹下的便签notes。

2.从内容提供器ContentProvider中查询,根目录下便签notes,
  备份便签。
  
  查询语句,类似
  1. Cursor folderCursor = mContext.getContentResolver().query(
  2. Notes.CONTENT_NOTE_URI,
  3. NOTE_PROJECTION,
  4. "(" + NoteColumns.TYPE + "=" + Notes.TYPE_FOLDER + " AND "
  5. + NoteColumns.PARENT_ID + "<>"
  6. + Notes.ID_TRASH_FOLER + ") OR " + NoteColumns.ID
  7. + "=" + Notes.ID_CALL_RECORD_FOLDER, null, null);



在整个导出功能中,最难的是内容提供器的查询。


AndroidManifest.xml中有配置NotesProvider,继承自ContentProvider。
 
  1. <provider
  2. android:name="net.micode.notes.data.NotesProvider"
  3. android:authorities="micode_notes"
  4. android:multiprocess="true" />



public class NotesProvider extends ContentProvider {


本篇就先介绍到这,整体的导出思路已经比较清楚了,今后在单独详细介绍ContentProvider的实现。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/69389?site
推荐阅读
相关标签
  

闽ICP备14008679号