Невозможно передать значение из одного приложения в другое приложение - PullRequest
0 голосов
/ 12 июня 2018

У меня есть два отдельных приложения Android на разных устройствах.Попытка передать или передать адрес получателя (но в этом случае мы попробуем строку).

Если я запускаю оба приложения на одном устройстве, это работает.Однако, если я запускаю одно приложение на устройстве, а другое - в эмуляторе, результат в App2 показывает либо «Hello World», либо «No Value», а not «We great!»как должно, если оно прошло или поделилось правильно.

Есть идеи, почему?

Пожалуйста, смотрите код:

Приложение 1: com.example.sharedpreferences

MainActivity

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SharedPreferences prefs = this.getSharedPreferences("demopref", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("demostring", "We are great ");
    editor.apply();
  }
}

Activity_main (приложение 1)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sharedpreferences"
android:sharedUserId="@string/dev"
android:sharedUserLabel="@string/dev1">
.......

strings.xml

<string name="dev">com.example</string>
<string name="dev1">example</string>

Приложение 2: com.example.sharedprefs2

Activity_main (приложение 2)

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

strings.xml

<string name="dev">com.example</string>
<string name="dev1">example</string>

Манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sharedprefs2"
android:sharedUserId="@string/dev"
android:sharedUserLabel="@string/dev1">

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.SEND" />

            <category android:name="android.intent.category.DEFAULT" />

            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
</application>

</manifest>

MainActivity

public class MainActivity extends AppCompatActivity {

TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = findViewById(R.id.tv);

    Context con = null;

    try {
        con = this.createPackageContext("com.example.sharedpreferences", 0);
        SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE);
        String your_data = pref.getString("demostring", "No Value");
        tv.setText(your_data);
        Log.d(TAG, "text passed in = " + your_data);
    } catch (Exception e) {
        Log.e("Not data shared", e.toString());
    }
}
}

Как это исправить?

1 Ответ

0 голосов
/ 12 июня 2018

Я думаю, вы неправильно понимаете, что такое SharedPreferences и как они работают.

Они хранят данные локально только на вашем устройстве.Они не доступны другим устройствам в любом случае.

Таким образом, вы можете поделиться ими, как вы разместили между двумя приложениями на одном устройстве.Но это никоим образом не работает, если оно выполняется на нескольких устройствах.

Для этого вам понадобится какой-нибудь бэкэнд-сервис.Возможно, взгляните на базу данных Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...