如何向其他Android应用程序索取信息?

neu*_*242 2 android rpc broadcastreceiver android-intent

我需要第三方应用程序("Foo")从我的应用程序("Bar")获取信息,但到目前为止我的解决方案似乎很麻烦:

  • 应用程序Foo需要来自Bar的信息并发送广播("bar.POLL").
  • 应用程序栏监听此广播,并回复另一个广播("bar.PUSH");
  • Foo侦听bar.PUSH并读取包含的Bundle的内容.

有没有更直接的方法来做到这一点?

编辑:我用一个非常简单的ContentProvider解决了它,如Guido建议:

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;
  }    
}
Run Code Online (Sandbox Code Playgroud)

请记住将提供程序添加到清单:

<provider android:name=".MyProvider" android:authorities="com.example.hello" />
Run Code Online (Sandbox Code Playgroud)

从像这样的Activity更新状态:

ContentValues cv = new ContentValues();
cv.put("state", "myNewState");
getContext().getContentResolver().update(Uri.parse("content://com.example.hello"), cv, null, null);
Run Code Online (Sandbox Code Playgroud)

从外部应用程序中的提供程序获取内容:

Cursor cur = managedQuery(Uri.parse("content://com.example.hello"), null, null, null, null);
if (cur.moveToFirst()) {
  String myContent = cur.getString(0);
}
Run Code Online (Sandbox Code Playgroud)

Gui*_*ido 5

您应该公开ContentProvider.

" 内容提供商存储和检索数据并使其可供所有应用程序访问.它们是跨应用程序共享数据的唯一方式;所有Android软件包都无法访问的公共存储区域. "

内容提供程序实现了用于查询提供程序和返回结果的公共接口.这并不难实现,但也许官方文档并不是最好的开始.您可以在以下位置找到其他示例