Как запросить информацию из другого приложения Android? - PullRequest
2 голосов
/ 06 сентября 2010

Мне нужны сторонние приложения ("Foo") для получения информации из моего приложения ("Bar"), но мое решение пока кажется громоздким:

  • Application Foo требует информацию от Bar и отправляетшироковещательная передача ("bar.POLL").
  • Панель приложений прослушивает эту трансляцию и отвечает другой трансляцией ("bar.PUSH");
  • Foo прослушивает bar.PUSH и читаетСодержимое включенного комплекта.

Есть ли более прямой способ сделать это?

РЕДАКТИРОВАТЬ : я решил это с очень упрощенным 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);
}

1 Ответ

5 голосов
/ 06 сентября 2010

Вы должны выставить ContentProvider .

" Поставщики контента хранят и извлекают данные и делают их доступными для всех приложений. Они являются единственным способом обмена данными между приложениями; нет единой области хранения, к которой могут получить доступ все пакеты Android. "

Контент-провайдеры реализуют общий интерфейс для запросов к провайдеру и возврата результатов. Это не сложно реализовать, но, возможно, официальная документация не самая лучшая для начала. Вы можете найти другие примеры по адресу:

...