如何在 android 中将数据从一个应用传输到另一个应用

How transfer data from one app to another app in android

我有两个应用程序,com.appone.onecom.apptwo.two

我想将数据从 appone 传输到 apptwo ,我希望当数据传输到 apptwo 时,apptwo 打开或者如果打开只出现(onResume)并显示该数据。 我写了这段代码:

com.appone.one:

 Intent i = new Intent(Intent.ACTION_DATE_CHANGED);
                    PackageManager manager = getPackageManager();
                    i = manager.getLaunchIntentForPackage("com.apptwo.two");
                    i.putExtra("MessageText",""+Connect.MessageArrive.toString());
                   i.addCategory(Intent.CATEGORY_LAUNCHER); 
startActivity(i);

com.apptwo.two:

@Override
    public void onResume() {
        super.onResume();
        String name=getIntent().getStringExtra("MessageText");
        Toast.makeText(getApplicationContext(),String.valueOf(name), Toast.LENGTH_LONG).show();
    }  

我只想写这一行:

String name=getIntent().getStringExtra("MessageText");

in OnResume 因为我不想再次加载 apptwpo,如果我将这一行写在 onCreate 中,我的代码可以正常工作。但我想要 onResume。 现在 apptwo returns 空 :(

我该怎么办? 提前致谢

使用 Shared Preferences 模式 MODE_WORLD_READABLE

SharedPreferences sPref = activity.getPreferences(Activity.MODE_WORLD_READABLE);

在首选项中保存值:

您可以使用 Content Provider 在您的应用之间共享数据。您可以从下面的 link 了解更多关于内容提供商的信息。

http://developer.android.com/guide/topics/providers/content-providers.html

注意:如果我在您的应用程序之间通过内容提供商传递数据没有错,您需要使用相同的密钥库对您的应用程序进行签名。

您还可以使用 Intents 将数据传递给您的应用程序。您可以从下面查看。

http://developer.android.com/training/sharing/send.html

这不是一个好的做法,但您可以使用共享首选项。

SharedPreferences preferences = getSharedPreferences(PREF_NAME, MODE_WORLD_READABLE);

这两个应用程序都是您的,因此可以轻松制作。

1)通过使用共享首选项,您可以将数据从 app1 保存到移动设备中,然后获取该数据并在 app2 中使用,反之亦然。

SharedPreferences 仅对小数据有用。

2) 内容提供者按照您的要求进行操作。仅当您需要在多个应用程序之间共享数据时才需要内容提供程序

http://developer.android.com/guide/topics/providers/content-providers.html

在您的情况下,您的应用必须是内容提供者

参考这个你问的 http://www.compiletimeerror.com/2013/12/content-provider-in-android.html#.Vwsy1vl97IU

第三种可能更好的方法是使用 protocol 或自定义 URI scheme。默认情况下,这是 Android 应用程序发送和接收数据的方式。例如,当您单击通过电子邮件发送给您的 url link 时,该应用会打开默认浏览器应用程序。这是因为使用 OS 注册的浏览器可以处理与 Web uri 模式匹配的 URI。

见附件link

http://developer.android.com/training/basics/intents/filters.html

使用 Intent 与 BroadCastReceiver 一起在应用程序之间传递数据

在您的 appOne 中创建

1) appOne 内的动态广播接收器 activity 特定事件调用 sendBroadcast(Intent)

不要像您提到的那样调用 activity above.Register appTwo 中的广播接收器具有某些操作,并且来自 appOne 的 sendBroadacst 意图具有 appTwo 中提到的相同操作。 因此,当您从 appOne 触发 sendbradcast(Intent) 时,侦听该 intent 的 appTwo 将触发,然后您将调用 Activity of appTwo(Your MainActivity) 在 appTwo 的 onReceive 方法中检查您的 activity 是否处于活动状态(如果 activity 处于活动状态,则来自 appTwo 的 sendBroadcast(Intent) 刷新 appTwo 中的消息,如果不是 Call Activty)

现在在您的 appTwo 中创建

1)静态 BroadCastReceiver 在应用程序未打开时通过清单中的某些操作接收意图

2)你的 appTwo 内的动态广播接收器 activity 如果应用程序打开刷新消息

我用这个 link 解决了我的问题: http://androiddhamu.blogspot.in/2012/03/share-data-across-application-in.html

appone:

  SharedPreferences prefs = getSharedPreferences("demopref",
                             Context.MODE_WORLD_READABLE);
                     SharedPreferences.Editor editor = prefs.edit();
                     editor.putString("demostring", ""+Connect.MessageArrive.toString());
                     editor.commit();

                  Intent i = new Intent(Intent.ACTION_DATE_CHANGED);
                    PackageManager manager = getPackageManager();
                    i = manager.getLaunchIntentForPackage("com.graphhopper.android");
                   // i.putExtra("MessageText",""+Connect.MessageArrive.toString());
                   i.addCategory(Intent.CATEGORY_LAUNCHER); 


                  //i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    startActivity(i);

apptwo:

  @Override
    public void onResume() {
        super.onResume();
            con = createPackageContext("com.appone.one", 0);
            SharedPreferences pref = con.getSharedPreferences(
                    "demopref", Context.MODE_PRIVATE);
            String data = pref.getString("demostring", "No Value");
}