Напишите службу в любом из ваших приложений или в отдельном приложении. У вас есть AIDL (Язык определения интерфейса Android), определенный как IRemoteService.aidl, ниже приведен пример моего псевдокода или примера. Используя этот подход, вы можете запускать активность и обрабатывать события другого приложения через ваше приложение.
// IRemoteService.aidl
// Declare any non-default types here with import statements
/** Example service interface */
interface IAccountService {
String getLoggedInUserInfo(String appId);
void userLogin(String appId,ILoginCallback cb);
void signout(String appId);
}
interface ILoginCallback {
void loginSuccess(String userId);
void loginFailed();
}
В вашей службе есть RemoteCallbacks
@Override
public IBinder onBind(Intent intent) {
final RemoteCallbackList<ILoginCallback> mCallbacks = new RemoteCallbackList<ILoginCallback>();
if(mCallbacks!=null){
int i = mCallbacks.beginBroadcast();
while(i>0){
i--;
try {
Log.e(TAG, "Callback ...");
mCallbacks.getBroadcastItem(i).loginSuccess(newUserId);
} catch (RemoteException e) {
// The RemoteCallbackList will take care of removing
// the dead object for us.
}
}
mCallbacks.finishBroadcast();
}
}
private final IAccountService.Stub mBinder = new IAccountService.Stub() {
@Override
public void userLogin(String appId,ILoginCallback cb) throws RemoteException {
String userId = Settings.getSettings().getUserId();
if(userId ==null||userId.length()==0){
mCallbacks.register(cb);
Intent intent = new Intent(getApplicationContext(), AccountLoginActivity.class);
intent.putExtra("deviceId", Settings.getSettings().getDeviceUniqueId());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
}
Вы можете найти подробные примеры AIDL в приведенных ниже ссылок.
- http://owenhuangtw.pixnet.net/blog/post/23760257-android-aidl-(android-interface-definition-language)
- http://www.app-solut.com/blog/2011/04/using-the-android-interface-definition-language-aidl-to-make-a-remote-procedure-call-rpc-in-android/
- https://github.com/afollestad/aidl-example
"Мне нужно, чтобы показать мое первое приложение в какой-то области экрана второго приложения" - это вообще не возможно. Есть способы, которыми первое приложение может отправить «RemoteViews» во второе приложение, чтобы второе приложение отображало его, хотя это немного неудобно и ограничивает вас тем, что предлагает «RemoteViews». – CommonsWare
@CommonsWare Прежде всего, я ожидал чего-то от этого от вас :) Как я могу достичь этого обмена мнениями? Также будут ли доступны данные, обновленные с этими представлениями? – skygeek
Но это тоже не невозможно ... Я думаю! – skygeek