如何传输数据从一个应用程序到另一个应用程序在Android

lkaoscv7  于 2022-12-25  发布在  Android
关注(0)|答案(7)|浏览(440)

我有两个应用程序,com.appone.onecom.apptwo.two
我想从appone传输数据到apptwo,我想当一个数据传输到apptwoapptwo打开或如果打开只出现(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");

因为我不想再次加载apptwpo,如果我用onCreate写这行代码,我的代码工作正常。但是我想用onResume写这行代码。现在apptwo返回null:(
我该怎么办?先谢了

kknvjkwl

kknvjkwl1#

你可以使用内容提供程序在你的应用之间共享数据。你可以通过下面的链接了解有关内容提供程序的详细信息。
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);
zte4gxcn

zte4gxcn2#

第三种可能更好的方法是使用protocol或自定义URI scheme。默认情况下,这是Android应用程序发送和接收数据的方式。例如,当你点击通过电子邮件发送给你的url链接时,应用程序会打开默认的浏览器应用程序。这是因为浏览器在操作系统中注册,它可以处理与Web URI模式匹配的URI。
请参见随附链接
http://developer.android.com/training/basics/intents/filters.html

x0fgdtte

x0fgdtte3#

这两个应用程序都是你的,所以可以很容易地使它。
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

7tofc5zh

7tofc5zh4#

使用Intent与BroadCastReceiver沿着在应用之间传递数据

在您的应用程序中创建一个

1)应用内的动态广播接收器特定事件调用sendBroadcast(Intent)上的一个活动
不要像上面提到的那样调用Activity。使用某个操作在appTwo中注册广播接收器,并使用appTwo中提到的相同操作从appOne中发送Broadacst Intent。因此,当您触发sendbradcast时(意图)来自appOne,监听该Intent的appTwo将被触发,此时您将调用appTwo的Activity(您的主活动)在appTwo的onReceive方法中检查您的活动是否处于活动状态(如果活动处于活动状态,则从appTwo发送Broadcast(Intent)以刷新appTwo中的消息(如果未调用活动))

现在在您的应用程序中Two Create

1)静态BroadCastReceiver,用于在应用未打开时通过清单内的某些操作接收Intent
2)应用内的动态广播接收器两个Activity(如果应用已打开以刷新)消息

cclgggtu

cclgggtu5#

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

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);

应用程序二:

@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");
}
b4wnujal

b4wnujal6#

在实施过程中需要注意以下事项。
1.有两个应用程序:App 1和App 2。我们需要将数据从APP 1发送到APP 2,当APP 2完成时,我们需要将数据从APP 2发送回APP 1。

步骤:--在两个应用程序清单中添加android:exported =“true”,用于您希望在其间进行通信的Activity。

在应用程序1中

private void launchApp2() {
    Intent intent = new Intent();
    //Need to register your intent filter in App2 in manifest file with same action.
    intent.setAction("com.example.app2.main"); // <packagename.main>
    Bundle bundle = new Bundle();
    bundle.putString("name", "ABC");
    intent.putExtra("data", bundle);
    intent.setType("text/plain");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(sendIntent, 101);
    } else {
    Log.d("App not installed")
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 101) {
        if (resultCode == Activity.RESULT_OK) {
            Bundle bundle = data.getBundleExtra("data");
            String username = bundle.getString("name");
            result.success(username);
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

在App 2清单中,

<activity android:name=".main">
    <intent-filter>    
        <!--The action has to be same as App1-->        
        <action android:name="com.example.app2.main" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

要获取App 2中的数据,

public getData (){
 Intent intent = new Intent();
 Bundle bundle = intent.getBundleExtra("data");
 String name = bundle.getString("name");
}

将数据发送回App 1

public sendData(){
Intent intent = new Intent();
 Bundle bundle = new Bundle();
 bundle.putString("name", "ABC");
 intent.putExtra("data", bundle)
 setResult(Activity.RESULT_OK, intent)
 finish()
}
bq3bfh9z

bq3bfh9z7#

Shared Preferences与模式MODE_WORLD_READABLE配合使用

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

保存首选项中的值:

相关问题