アプリケーション ("Bar") から情報を取得するには、サード パーティのアプリケーション ("Foo") が必要ですが、これまでのところ私のソリューションは面倒です。
- アプリケーション Foo は Bar からの情報を必要とし、ブロードキャスト ("bar.POLL") を送信します。
- Application Bar はこのブロードキャストをリッスンし、別のブロードキャスト ("bar.PUSH") で応答します。
- Foo は bar.PUSH をリッスンし、含まれている Bundle の内容を読み取ります。
これを行うより直接的な方法はありますか?
編集: 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);
}