2010-09-06 3 views
2

мне нужно сторонние приложения («Foo»), чтобы получить информацию из моего приложения («Бар»), но мое решение до сих пор кажется громоздким:Как запросить информацию у другого приложения Android?

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

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

EDIT: Я решил это с крайне упрощенным 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); 
} 
+0

Спасибо, полезно – orip

ответ

5

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

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

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

+0

Вы также можете попробовать использовать услугу. Это зависит от того, что вы хотите сохранить/отправить – Falmarri

+1

Falmarri: Мне все еще нужен какой-то метод RPC, не так ли? Я уже использую трансляции в службе. – neu242

+0

Если вы используете ContentProvider, вы можете запросить нужные данные, запросив ContentResolver для данного URI. Я не понимаю, зачем вам нужен RPC-материал. Предоставление контента - естественный способ сделать это, ИМО. –

 Смежные вопросы

  • Нет связанных вопросов^_^