如何在 android 中将数据从一个应用传输到另一个应用
How transfer data from one app to another app in android
我有两个应用程序,com.appone.one
和 com.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");
}
我有两个应用程序,com.appone.one
和 com.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");
}