Подтвердить что ты не робот

Обмен данными между двумя приложениями

Недавно у меня было интервью, в котором задавали вопрос: "Как бы вы могли делиться данными между двумя установленными приложениями или apk?"

У меня не было ответа на этот вопрос. Может ли кто-нибудь помочь мне в определении способа сделать это...

4b9b3361

Ответ 1

ContentProviders - хороший подход для обмена данными между приложениями.

Ответ 2

Отправить данные из приложения 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">

Ответ 3

Я подозреваю, что они, скорее всего, ищут специфические для Android методы, такие как ответ поставщика контента.

Другие альтернативы... Android Specific - удаленные сервисы Общие - соединения TCP/IP Общее - Запись в папку на SD-карте

Хотите узнать больше о конкретном методе?

Также краду этот вопрос для интервью сегодня:)

Ответ 4

Если вы хотите обмениваться данными между приложениями, убедитесь, что вы подписываете один ключ:

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

Это цитата из: страницы разработчиков Android о подписании

Если это небольшой объем данных, вы можете отправить его через намерение.

Ответ 5

Поставщик контента - это компонент android, который должен использоваться, если одно приложение хочет поделиться своими данными с другим приложением.

Примечание. Файлы, SqliteDatabases, файлы Sharedpreference, созданные приложением, являются частными только для этого приложения. Другое приложение не может напрямую обращаться к нему. Если программист предоставляет базу данных с помощью поставщика контента, тогда только другие данные доступны для других приложений. Для связи с поставщиком контента используйте распознаватель контента.

Ответ 6

Моим требованием было отправить простую строку из одного приложения в другое и вернуть ее обратно. Как "идентификатор пользователя" из 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()
}