我正在尝试在我的应用中支持GBoard
。我希望用户能够从GBoard中选择GIF。我的onCommitContent
看起来像这样:
@Override
public void onCommitContent(InputContentInfoCompat inputContentInfo, int flags, Bundle opts) {
try {
if (inputContentInfo != null){
if (inputContentInfo.getContentUri() != null){
Log.v(inputContentInfo.getContentUri().getPath());
}
if (inputContentInfo.getLinkUri() != null){
Log.v(inputContentInfo.getLinkUri().getPath());
}
Log.v((String)(inputContentInfo.getDescription().getLabel()));
imageURI = "content://com.google.android.inputmethod.latin" + inputContentInfo.getContentUri().getPath() + inputContentInfo.getLinkUri().getPath();
}
Bitmap bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), Uri.parse(imageURI));
imageView.setImageBitmap(bitmap);
} catch (Exception ex) {
Log.v(ex.getMessage());
}
}
但是我遇到了以下异常。
没有内容提供者:content://com.google.android.inputmethod.latin
请帮助。
答案 0 :(得分:0)
您需要实施该方案:
在scheme“ IETF”中对内容:// BCP35进行了说明,它指示您看到IANA“ Uniform Resource Identifier (URI) Schemes”的位置解释:
URI方案|模板|描述状态|参考|笔记
内容| prov/content |内容|临时| Dave_Thaler | -
链接将您定向到此信息:
”(最近更新为2012-09-23)
资源标识符(RI)方案名称:content
状态:临时方案语法:
内容:// provider /方案语义:
访问Android内容提供商。编码注意事项:
未知,请谨慎使用。使用此方案名称的应用程序/协议:
在Android Content Provider上执行查询互操作性注意事项:
未知,请小心使用。
可能不适合在公共互联网上公开使用。安全注意事项:
未知,请谨慎使用。联系方式:
注册方:Dave Thaler
计划创建者:开放手机联盟作者/更改控制器:
注册方或经验证可以代表的人
方案创建者。请参阅先前的答案。参考文献:
http://en.wikipedia.org/wiki/Open_Handset_Alliance,
http://developer.android.com/guide/topics/providers/content-providers.html(文件创建于2012-09-23)”。
有关详细信息,请参考最后一个URL“ Android Developers > Docs > Guides > Content providers”
“内容提供者可以帮助应用程序管理对自身存储,由其他应用程序存储的数据的访问,并提供与其他应用程序共享数据的方式。它们封装数据并提供定义数据安全性的机制。内容提供者是连接一个进程中的数据和另一个进程中运行的代码的标准接口实现内容提供者有很多优点,最重要的是,您可以配置内容提供者以允许其他应用程序安全地访问和修改您的应用程序数据...
...
许多其他类都依赖于ContentProvider类:
如果要使用这些类中的任何一个,您还需要在应用程序中实现内容提供程序。请注意,使用同步适配器框架时,您还可以创建存根内容提供程序作为替代。有关此主题的更多信息,请参见Creating a stub content provider。
发件人:Creating a stub content provider:
...
添加存根内容提供商
要为您的应用创建存根内容提供程序,请扩展类ContentProvider并存根其必需的方法。以下代码段显示了如何创建存根提供程序:
在科特林:
/*
* Define an implementation of ContentProvider that stubs out
* all methods
*/
class StubProvider : ContentProvider() {
/*
* Always return true, indicating that the
* provider loaded correctly.
*/
override fun onCreate(): Boolean = true
/*
* Return no type for MIME type
*/
override fun getType(uri: Uri): String? = null
/*
* query() always returns no results
*
*/
override fun query(
uri: Uri,
projection: Array<String>,
selection: String,
selectionArgs: Array<String>,
sortOrder: String
): Cursor? = null
/*
* insert() always returns null (no URI)
*/
override fun insert(uri: Uri, values: ContentValues): Uri? = null
/*
* delete() always returns "no rows affected" (0)
*/
override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int = 0
/*
* update() always returns "no rows affected" (0)
*/
override fun update(
uri: Uri,
values: ContentValues,
selection: String,
selectionArgs: Array<String>
): Int = 0
}
...
在清单中声明提供者
同步适配器框架通过检查您的应用程序已在其应用清单中声明了提供程序来验证您的应用程序具有内容提供程序。要在清单中声明存根提供者,请添加具有以下属性的<provider>元素:
...
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.network.sync.BasicSyncAdapter"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
<provider
android:name="com.example.android.datasync.provider.StubProvider"
android:authorities="com.example.android.datasync.provider"
android:exported="false"
android:syncable="true"/>
...
</application>
</manifest>
请参考以上URL,以获取完整的文档以及此简短答案中未包含的其他链接。