无法将值从一个应用程序传递到另一个应用程序

时间:2018-06-12 07:39:52

标签: android sharedpreferences

我在不同的设备上有两个独立的Android应用程序。试图传递或共享目标地址(但在这种情况下,我们将尝试一个字符串)。

如果我在同一设备上运行这两个应用程序,它就可以运行。但是,如果我在设备上运行一个应用程序而在模拟器中运行另一个应用程序,则App2中的结果将显示" Hello World"或"没有价值"并且"我们很棒!"喜欢它应该通过或正确共享。

任何想法为什么?

请参阅代码:

App1: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(app1)

<?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>

App2:com.example.sharedprefs2

activity_main(app2)

<?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 :(得分:2)

我认为你误解了SharedPreferences是什么以及它们是如何工作的。

它们仅在您的设备上本地存储数据。它们不会以任何方式与其他设备共享。

因此,您可以按照在同一设备上的2个应用之间发布的方式分享它们。但如果它跨越多个设备,那么这绝不可行。

为此,您需要一些后端服务。也许看一下Firebase数据库。