`
啸笑天
  • 浏览: 3460018 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

Android 实时文件夹

阅读更多

实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹,必须要有两个方面的支持。

1,要定义一个用来创建实时文件夹的Activity。

2,所指定数据信息URI的ContentProvider必须支持实时文件夹时文件夹查询

 

一、定义创建实时文件夹的Activity

想在桌面长按后选择实时文件夹就会弹出一个可用实时文件夹的列表对话框,必须在应用程序内的Activity中添加一个Action为android.intent.action.CREATE_LIVE_FOLDER的IntentFilter。而在这个创建实时文件夹的Activity中,我们要把实时文件夹的信息以附加信息的形式存储在一个Intent对象当中。

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.studio.android.ch10.ex2"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" 
                 android:label="@string/app_name">
        <activity android:name=".MyAllContacts"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name=
                    "android.intent.action.CREATE_LIVE_FOLDER" />
                <category android:name=
                    "android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="3" />
</manifest> 



  

由于Content的ContentProvider已经实现了对实时文件夹的相关支持

 

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Contacts;
import android.provider.LiveFolders;

public class MyAllContacts extends Activity {
    public static final Uri LIVE_FOLDER_URI =
        Uri.parse("content://contacts/live_folders/people");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getAction()
                .equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {
            
            Intent intent = new Intent();

            intent.setData(LIVE_FOLDER_URI);//在文件夹,对于要查询的URI则是以Data的形式存储在Intent对象中。Contacts的ContentProvider已经实现了对实时文件夹的相关支持。
            intent.putExtra(
                    LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT,
                    new Intent(Intent.ACTION_VIEW,
                            Contacts.People.CONTENT_URI));
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,
                    "MyAllContacts");
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
                    Intent.ShortcutIconResource.fromContext(this,
                            R.drawable.icon));
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, 
                    LiveFolders.DISPLAY_MODE_LIST);//还可以设置LiveFolders.DISPLAY_MODE_LIST
            
            setResult(RESULT_OK, intent);
        } else {
            setResult(RESULT_CANCELED);
        }

        finish();
    }
}

 二、定义支持实时文件夹的ContentProvider

要使一个ContentProvider支持实时文件夹的查询,主要要实现下面2个:

  1,为实时文件夹查询定义一个专门的URI

  2,在query查询方法中针对实时文件夹的路径进行相应的查询然后返回含有特定列名的Cursor



 

在CountryCode.java中

 

   //为URI匹配器增加实时文件夹URI的匹配号码

    public static final int LIVE_FOLDER = 3;

    ---

    ---

    ---

 

   //定义实时文件夹的URI

   public static final Uri LIVE_FOLDER_URI = 

   Uri.parse("content://" + AUTHORITY + "/livefolder");

在MyProvider.java中

 

 static {

        sMatcher = new UriMatcher(UriMatcher.NO_MATCH);

  ----

---

        sMatcher.addURI(CountryCode.AUTHORITY, 

                "livefolder/", CountryCode.LIVE_FOLDER);

    }

---

---

     @Override

    public Cursor query(Uri uri, String[] projection, 

            String selection, String[] args,String order) {

        SQLiteDatabase db = dbHelper.getReadableDatabase();

        Cursor c;

 

        switch (sMatcher.match(uri)) {

       ----

        case CountryCode.LIVE_FOLDER:

            String[] myProjection = {

                    //注意更改别名

                    CountryCode.ID + " AS " + LiveFolders._ID,

                    CountryCode.COUNTRY + " AS " + LiveFolders.NAME,

                    CountryCode.CODE + " AS " + LiveFolders.DESCRIPTION

            };

            c = db.query(CountryCode.TB_NAME, myProjection, selection, 

                    args,null,null,order);

            break;

        default:

            throw new IllegalArgumentException("Unknown URI " + uri);

        }

 

        c.setNotificationUri(getContext().getContentResolver(), uri);

        return c;

    }

 

    CreateLiveFolder.java中

     import android.app.Activity;

import android.content.Intent;
import android.os.Bundle;
import android.provider.LiveFolders;

public class CreateLiveFolder extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getAction()
                .equals(LiveFolders.ACTION_CREATE_LIVE_FOLDER)) {
            
            Intent intent = new Intent();

            intent.setData(CountryCode.LIVE_FOLDER_URI);
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME,
                    "CountryCode");
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
                    Intent.ShortcutIconResource.fromContext(this,
                            R.drawable.icon));
            intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, 
                    LiveFolders.DISPLAY_MODE_LIST);
            
            setResult(RESULT_OK, intent);
        } else {
            setResult(RESULT_CANCELED);
        }
        finish();
    }
}

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.studio.android.chp10.ex3"
      android:versionCode="1"
      android:versionName="1.0.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".SQLite2"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <provider android:name="MyProvider"
            android:authorities="com.studio.andriod.provider.countrycode" />
            
        <activity android:name=".CreateLiveFolder">
            <intent-filter>
                <action android:name=
                    "android.intent.action.CREATE_LIVE_FOLDER" />
                <category android:name=
                    "android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

 

 

 

 

 

 

 

  • 大小: 67 KB
  • 大小: 91 KB
分享到:
评论

相关推荐

    Android实时文件夹创建方法

    本文实例讲述了Android实时文件夹创建方法。分享给大家供大家参考。具体如下: 实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹,必须要有两方面的支持。一方面是,...

    android 删除文件夹及文件夹下面的所有文件

    android 删除文件夹及文件夹下面的所有文件

    android下选择图片文件夹并显示

    android下选择图片文件夹并显示对应文件夹下的图片文件,有需要的可以参考一下。 android下选择图片文件夹并显示对应文件夹下的图片文件,有需要的可以参考一下。 android下选择图片文件夹并显示对应文件夹下的图片...

    android获取文件夹图片

    在Android开发中,获取文件夹中的图片并展示在GridView中是一项常见的需求,特别是在构建一个相册应用或者需要从用户设备中选择图片的应用场景下。以下将详细介绍如何实现这个功能。 首先,我们需要理解Android的...

    android从指定文件夹中显示图片

    在Android平台上,从指定文件夹显示图片涉及到一系列的步骤和技术,包括文件系统操作、图片加载库的使用以及UI设计。以下是对这个主题的详细讲解: 首先,我们需要理解Android的文件系统结构。Android设备通常有两...

    android 文件文件夹批量蓝牙分享

    文件文件夹批量蓝牙分享 android的蓝牙批量分享,可以参考

    Android-SD卡文件夹创建和删除实现

    本文将深入探讨如何在Android中创建和删除SD卡上的文件夹,以及如何利用ListView和BaseAdapter来显示这些文件夹信息。 首先,让我们了解如何获取SD卡的路径。在Android中,SD卡通常被视为外部存储,可以通过`...

    android文件夹浏览器实现

    思路: 获取当前目录下的文件列表,然后显示到listview上面,当点击某个文件夹,则重新加载listview的内容为该文件夹下的文件列表,如果点击文件,则选择打开文件...实现和小米自带文件夹浏览器需求的文件夹浏览器实现

    android 私有文件夹 文件的写入与读取

    在Android系统中,每个应用程序都有自己的私有文件夹,用于存储应用相关的数据,这些数据对其他应用程序来说是不可见的,确保了数据的安全性。本文将深入探讨如何在Android中进行文件的写入与读取操作,以及相关工具...

    Android 新建文件夹源码

    在Android系统中,新建文件夹的操作是通过编程的方式实现的,这对于开发人员来说是一项基本技能。下面我们将深入探讨如何在Android应用中实现这个功能,包括理解Android文件系统、获取存储权限、创建文件夹以及源码...

    Android文件夹管理器

    《Android文件夹管理器》是2017年9月19日使用Android Studio(简称AS)开发的一款简单易用的文件管理应用。这款应用的核心功能是帮助用户方便地管理和浏览设备上的文件夹,它的代码结构简洁,适合初学者学习和修改以...

    Android Launcher文件夹方面的个人总结

    这是自己多年来做Launcher对Fold模块的一些总计,需要的拿去用吧!

    android 浏览 文件夹 目录

    在Android平台上,浏览文件夹和目录是开发过程中常见的任务,特别是在构建涉及用户交互或数据管理的应用时。Android提供了多种API和工具,使得开发者能够轻松地访问和操作设备上的文件系统。以下将详细介绍如何在...

    Android访问windows共享的文件夹,并进行文件读写de SMBJ jar包

    "Android访问windows共享的文件夹,并进行文件读写"是一个常见的需求,这通常涉及到网络文件系统(Network File System, NFS)的使用。在Android中,一个常用且强大的库是SMBJ,它允许我们通过Java实现Server ...

Global site tag (gtag.js) - Google Analytics