我需要第三方应用程序(“Foo”)从我的应用程序(“Bar”)获取信息,但到目前为止我的解决方案似乎很麻烦:
有更直接的方法吗?
编辑:我用Guido建议的极其简单的ContentProvider解决了这个问题:
public class MyProvider extends ContentProvider {
private String state = "";
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
MatrixCursor cursor = new MatrixCursor(new String[]{"state"});
cursor.addRow(new Object[]{state});
return cursor;
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
state = (String) values.get("state");
return 1;
}
@Override
public boolean onCreate() {
return true;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
}
请记住将提供程序添加到清单中:
<provider android:name=".MyProvider" android:authorities="com.example.hello" />
从像这样的活动中更新状态:
ContentValues cv = new ContentValues();
cv.put("state", "myNewState");
getContext().getContentResolver().update(Uri.parse("content://com.example.hello"), cv, null, null);
从外部应用中的提供商处获取内容:
Cursor cur = managedQuery(Uri.parse("content://com.example.hello"), null, null, null, null);
if (cur.moveToFirst()) {
String myContent = cur.getString(0);
}
答案 0 :(得分:5)
您应该公开ContentProvider。
“内容提供商存储和检索数据并使其可供所有应用程序访问。它们是跨应用程序共享数据的唯一方式;所有Android软件包都无法访问的公共存储区域。”
内容提供程序实现了一个用于查询提供程序和返回结果的通用接口。这并不难实现,但也许官方文档并不是最好的开始。您可以在以下位置找到其他示例: