代码之家  ›  专栏  ›  技术社区  ›  neu242

如何从另一个Android应用程序获取信息?

  •  2
  • neu242  · 技术社区  · 14 年前

    我需要第三方应用程序(“foo”)从我的应用程序(“bar”)中获取信息,但目前为止我的解决方案似乎很麻烦:

    • 应用程序foo需要来自bar的信息并发送广播(“bar.poll”)。
    • 应用程序栏侦听此广播,并用另一个广播(“bar.push”)进行响应;
    • foo监听bar.push并读取所包含包的内容。

    有更直接的方法吗?

    编辑 :我用一个极其简单的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;
      }    
    }
    

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

    <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);
    }
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   Guido    14 年前

    你应该暴露 ContentProvider .

    内容提供程序存储和检索数据,并使所有应用程序都可以访问这些数据。它们是跨应用程序共享数据的唯一方法;没有所有Android软件包都可以访问的通用存储区域。

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