标签: android-contentresolver

ContentResolver notifyChange方法是否也通知Uri的详细信息?

在应用数据期间,我使用notifyChangeUri.

我想说我通知了content://com.package.my/items.

我还详细Activity显示了来自的数据content://com.package.my/items/1.

通知"一般" Uri结果也会在"详细信息"中Uri得到通知吗?

android uri datacontract android-contentresolver

8
推荐指数
1
解决办法
5128
查看次数

如何JUnit测试ContentResolver.notifyChange

我正在为a编写测试ContentProvider,insert我正在通知更改getContext().getContentResolver().notifyChange(mUri, null);

我的测试类扩展ProviderTestCase2.我创建了以下模拟ContentObserver类:

private class ContentObserverMock extends ContentObserver {
    public boolean changed = false;

    public ContentObserverMock(Handler handler) {
        super(handler);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onChange(boolean selfChange) {
        changed = true;
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是测试用例:

public void testInsertNotifyContentChanges() {
    ContentResolver resolver = mContext.getContentResolver();
    ContentObserverMock co = new ContentObserverMock(null);

    resolver.registerContentObserver(CONTENT_URI, true, co);

    ContentValues values = new ContentValues();
    values.put(COLUMN_TAG_ID, 1);
    values.put(COLUMN_TAG_CONTENT, "TEST");

    resolver.insert(CONTENT_URI, values);
    assertTrue(co.changed); …
Run Code Online (Sandbox Code Playgroud)

android android-contentresolver android-testing

8
推荐指数
1
解决办法
2174
查看次数

以编程方式编辑联系人的姓名/电话号码

我试图以编程方式修改联系人的显示名称:

     try {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.CommonDataKinds.Phone._ID + " = ?", new String[] {contact_id})
        .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, "anything")
        .build());

        ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        Log.w("UpdateContact", e.getMessage()+"");
        for(StackTraceElement ste : e.getStackTrace()) {
            Log.w("UpdateContact", "\t" + ste.toString());
        }
        Context ctx = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(ctx, "Update failed", duration);
        toast.show();
    }
Run Code Online (Sandbox Code Playgroud)

contact_idContactsContract.CommonDataKinds.Phone._ID聚集在以前的活动

代码执行正常,但是:

  • ContentProviderResult[] 结果为空
  • 联系人姓名保持不变

我也尝试了Data.DISPLAY_NAME但效果相同.

我阅读了手册:http://developer.android.com/guide/topics/providers/contacts-provider.html但我不想调用本机意图.

谢谢.

android android-contentresolver contactscontract android-contacts

8
推荐指数
1
解决办法
7735
查看次数

如何使FileProvider可用于其他应用程序?

是否可以将FileProvider用于其他应用程序?

的manifest.xml

...
 <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="com.example.myapp.fileprovider"
        android:exported="true"
        android:grantUriPermissions="false"
        android:permission="com.example.filesvisible.permission.READ" >
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/filespath" />
    </provider>
...
Run Code Online (Sandbox Code Playgroud)

来自doc:

false:提供程序不可用于其他应用程序.设置android:exported ="false"以限制对应用程序的提供程序的访问.只有与提供者具有相同用户ID(UID)的应用程序才能访问它.

我试图将导出设置为true但我得到了这个异常 Unable to get provider android.support.v4.content.FileProvider: java.lang.SecurityException: Provider must not be exported为什么我无法导出FileProvider?

provider android android-contentresolver android-fileprovider

8
推荐指数
1
解决办法
6110
查看次数

使用Realm库获取光标

我正在使用游标适配器进行列表视图.我打算使用内容解析器来获取光标.现在我改变了主意,让它有机会学习Realm.

如何通过使用领域获得"光标"对象?顺便说一句,我也很感激给一些片段来排序光标.

谢谢.

final class Contact extends RealmObject {

private CharSequence mName;


public CharSequence getName() {
    return mName;
}

public void setName(CharSequence name) {
    this.mName = name;
}
Run Code Online (Sandbox Code Playgroud)

}

final class ContactListAdapter extends CursorRecyclerViewAdapter<ContactListAdapter.ContactHolder> implements View.OnClickListener {

private OnContactClickListener mListener;


public ContactListAdapter(Context context, Cursor cursor) {
    super(context, cursor);
}

@Override
public ContactHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = getLayoutInflater().inflate(R.layout.cell_contact, parent, false);

    ContactHolder contactHolder = new ContactHolder(itemView);
    contactHolder.mContactPhotoImageView.setOnClickListener(this);

    return contactHolder;
}

@Override
public void onBindViewHolder(ContactHolder viewHolder, Cursor …
Run Code Online (Sandbox Code Playgroud)

android realm android-contentresolver android-contentprovider

8
推荐指数
1
解决办法
2685
查看次数

无法查询ContentResolver以从my_downloads获取下载文件的名称,但在all_downloads中正常工作

我的应用程序设置为在打开扩展名为.myappdata的文件后激活.它通过这个intent-filter完成了这个:

    <activity
        android:name="com.myapp.ExamineFileActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:scheme="file" android:pathPattern=".*\\.myappdata" android:mimeType="*/*"/>
            <data android:scheme="content" android:pathPattern=".*\\.myappdata" android:mimeType="*/*"/>
        </intent-filter>
    </activity>
Run Code Online (Sandbox Code Playgroud)

我打开Chrome网络浏览器(在运行Android 6.0.1的Nexus 7上),然后转到下载名为"file123.myappdata"的文件的网站,然后点击Chrome中的"打开"链接.

该操作会触发我的应用程序打开并运行此代码,这将获取下载的文件名:

    Uri uri = this.getIntent().getData();
    if (uri.getScheme().equals("content")) {
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        try {
            if (cursor != null && cursor.moveToFirst()) {
                return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
            }
        } finally {
            cursor.close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当这段代码运行时(在我从Chrome打开文件后),uri就是内容:// downloads/my_downloads/1602,cursor.moveToFirst()返回false

然后我退出我的应用程序并转到下载应用程序并打开完全相同的文件.这会触发我的应用程序打开,运行相同的代码除了使用uri 内容:// downloads/all_downloads/1602(uri中的其他内容完全相同),cursor.moveToFirst()调用返回true并返回cursor.getString ()方法返回"file123.myappdata"(这正是我想要的).

当我从Chrome打开下载的文件(在uri中给我"my_downloads")而不是从下载中打开相同的下载文件(在uri中给我"all_downloads")时,为什么cursor.moveToFirst()方法找不到任何数据?

android android-contentresolver

8
推荐指数
0
解决办法
817
查看次数

How do I retrieve an image from Firebase Storage and show it? Getting "No content provider" error

My app is saving images in Firebase Storage, but I'm having trouble retrieving and viewing them. Images are uploaded fine, into a folder called "images".

Each image is associated with a Box. The boxes collection in the database looks like this:

boxes > key1 > name: Box 1 name
             > uid: xxxxxxxxx          (user id of Box creator)
             > image: "images/box1image.jpg"
      > key2 > name: Box 2 name
             > uid: yyyyyyyyy          
             > image: "images/box2image.jpg"
Run Code Online (Sandbox Code Playgroud)

I want to retrieve the image …

android-contentresolver android-imageview firebase-storage

8
推荐指数
1
解决办法
63
查看次数

Android:根据电话号码搜索联系人

我必须根据电话号码搜索联系人.以下是用于获取联系人的代码.我使用的Android API级别是15

        String[] projection = new String[] {
                ContactsContract.CommonDataKinds.Phone._ID,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                ContactsContract.CommonDataKinds.Phone.TYPE,
                ContactsContract.CommonDataKinds.Phone.NUMBER};

        Cursor query = mContent.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection,
                    ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '%" + constraint.toString() + "%'"
                    ,null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
Run Code Online (Sandbox Code Playgroud)

我能够在联系人表格中保存的电话号码中获取与空格无关的联系人.如果电话号码之间有空格,则上述查询失败.例如,对于联系人,如果电话号码保存为1234567890,而当我使用值1234搜索时,将检索此联系人.但如果联系人保存为"123 456 7890",则会失败.

最重要的是,当我尝试搜索包含或包含"1234"电话号码的联系人时,结果应该返回电话号码为"1234567890"和"123 4567 890"的联系人.由于一些Android手机节省了电话号码之间的空间.

我该如何解决这个问题.任何帮助表示赞赏.

android android-contentresolver android-contacts android-sqlite

7
推荐指数
1
解决办法
3330
查看次数

无法在某些设备上播放默认通知铃声

这是我播放铃声通知的代码片段:

Uri u = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(MainActivity.this, u);
r.play();
Run Code Online (Sandbox Code Playgroud)

这似乎在大多数设备上都能正常工作。但是,在三星 S8 和三星 S9 等某些设备上,它不起作用。Logcat 显示:

I/Ringtone: Internal uri : content://settings/system/notification_sound
D/RingtoneManager: getActualDefaultRingtoneUri  type    :2
W/MediaPlayer: Couldn't open content://0@settings/system/notification_sound_cache: 
java.io.FileNotFoundException: open failed: ENOENT (No such file or directory)
Run Code Online (Sandbox Code Playgroud)

请注意,相同的代码在三星 S7 上运行良好。

想知道是否有人有任何见解。

android android-contentresolver android-notifications

7
推荐指数
0
解决办法
1224
查看次数

使用 ContentResolver 和 openInputStream() (Android)

新的Android和工作在喜欢的应用 在结束了这个问题java.io.FileNotFoundException: /document/86: open failed: ENOENT (No such file or directory) 现在我的工作的解决方案,“那如何使用 ContentResolver的和openInputStream() ”谁能帮助我如何做到这一点,请

java android android-contentresolver

7
推荐指数
1
解决办法
7023
查看次数