Недавно у меня было интервью, в котором задавали вопрос: "Как бы вы могли делиться данными между двумя установленными приложениями или apk?"
У меня не было ответа на этот вопрос. Может ли кто-нибудь помочь мне в определении способа сделать это...
Недавно у меня было интервью, в котором задавали вопрос: "Как бы вы могли делиться данными между двумя установленными приложениями или apk?"
У меня не было ответа на этот вопрос. Может ли кто-нибудь помочь мне в определении способа сделать это...
ContentProviders - хороший подход для обмена данными между приложениями.
Отправить данные из приложения 1 (например: имя приложения 1: com.sharedpref1).
SharedPreferences prefs = getSharedPreferences("demopref",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("demostring", strShareValue);
editor.commit();
Получить данные в приложении 2 (для получения данных из общих настроек в приложении 1).
try {
con = createPackageContext("com.sharedpref1", 0);//first app package name is "com.sharedpref1"
SharedPreferences pref = con.getSharedPreferences(
"demopref", Context.MODE_PRIVATE);
String your_data = pref.getString("demostring", "No Value");
}
catch (NameNotFoundException e) {
Log.e("Not data shared", e.toString());
}
В обоих файлах манифеста приложений добавить один и тот же общий идентификатор пользователя и метку,
android:sharedUserId="any string"
android:sharedUserLabel="@string/any_string"
оба одинаковы... и общий ярлык пользователя должен быть из string.xml
, как этот пример.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xxxx"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="any string"
android:sharedUserLabel="@string/any_string">
Я подозреваю, что они, скорее всего, ищут специфические для Android методы, такие как ответ поставщика контента.
Другие альтернативы... Android Specific - удаленные сервисы Общие - соединения TCP/IP Общее - Запись в папку на SD-карте
Хотите узнать больше о конкретном методе?
Также краду этот вопрос для интервью сегодня:)
Если вы хотите обмениваться данными между приложениями, убедитесь, что вы подписываете один ключ:
Обмен кодами/данными через разрешения - система Android обеспечивает на основе разрешений на основе сигнатур, чтобы приложение могло выставить функциональность другому приложению, подписанному с помощью указанный сертификат. Подписывая несколько приложений с тем же сертификат и использование проверок разрешений на основе подписей, приложения могут безопасно использовать код и данные.
Это цитата из: страницы разработчиков Android о подписании
Если это небольшой объем данных, вы можете отправить его через намерение.
Поставщик контента - это компонент android, который должен использоваться, если одно приложение хочет поделиться своими данными с другим приложением.
Примечание. Файлы, SqliteDatabases, файлы Sharedpreference, созданные приложением, являются частными только для этого приложения. Другое приложение не может напрямую обращаться к нему. Если программист предоставляет базу данных с помощью поставщика контента, тогда только другие данные доступны для других приложений. Для связи с поставщиком контента используйте распознаватель контента.
Моим требованием было отправить простую строку из одного приложения в другое и вернуть ее обратно. Как "идентификатор пользователя" из App1 в App2 и получить "username" обратно в App1. Мне удалось добиться этого с помощью неявного намерения и startActivityForResult. Если кто-то ищет полный процесс, я разместил свой ответ здесь. Как отправить данные между одним приложением в другое приложение в Android? ,
App1> MainActivity.java
//Need to register your intent filter in App2 in manifest file with same action.
intent.setAction("com.example.sender.login"); // <packagename.login>
intent.setType("text/plain");
startActivityForResult(intent, REQUEST_CODE);
onActivityResult(...) {
...
// Handle received data from App2 here
}
У меня было два действия в App2 т.е. MainActivity и LoginActivity.
App2> AndroidManifest.xml
<intent-filter>
<!--The action has to be same as App1-->
<action android:name="com.example.sender.login" />
...
</intent-filter>
App2> LoginActivity.java
override fun onResume() {
...
// Handle data from App1 here
}
fun onClickBack(view: View) {
val intent = intent
...
// Set data in bundle here for App1
setResult(Activity.RESULT_OK, intent)
finish()
}