Android-如何保存字符串并从任何应用程序访问



我需要将创建的ID存储在Android设备中,该ID应由我们安装在设备中的几个应用程序中的第一个创建,应阅读通过设备中的任何其他应用程序。它还需要与所有Android设备一起使用。

我尝试使用内容提供商,但看来我没有几个具有相同权限的内容提供商,并且为每个内容提供商拥有不同的权限,这些提供商将搜索每个应用程序的所有当局不是一个可行的选择。

我还尝试修改用户词典,但是某些Android版本,尤其是三星的版本,不允许设置字典或默认未安装字典,因此我无法访问它。

所以我的问题是:

如何通过安装在设备中的任何应用程序创建和读取一个全局变量,一个字符串?有什么方法可以实现这一目标吗?某种全局词典或类似的东西?

最佳方法

ContentProviders我认为,如果您正在寻找最佳方法。

即使将来以获取更多数据,您应该使用此选项,这是在应用程序之间共享数据的好方法。

Alernative方法

APP 1(对于Ex:App1软件包名称为" com.app1")。

SharedPreferences prefs = getSharedPreferences("pref1",
                    Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("stringDemo1", strShareValue);
            editor.commit();

app2(您可以将其用于您的其他30个应用程序)(从应用程序1中的共享首选项获取数据)。

    try {
            con = createPackageContext("com.app1", 0);//first app package name is "com.sharedpref1"
            SharedPreferences pref = con.getSharedPreferences(
                        "pref1", Context.MODE_PRIVATE);
            String your_data = pref.getString("stringDemo1", "No Value");
        } 
    catch (NameNotFoundException e) {
                Log.e("Not data shared between two applications", e.toString());
         }

在App1和App2中,直至App 30清单文件添加相同的共享用户ID&标签,

 android:sharedUserId="any string" 
 android:sharedUserLabel="@string/any_string"

两者都是相同的...共享用户标签必须从String.xml

要理解更好的检查以下示例。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xxxx"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="any string" 
android:sharedUserLabel="@string/any_string">

我通过从这篇文章中创建唯一标识符并使用手机未重置手机时将相同的Android ID来获得另一种方法,我可以具有独特的,不可变的ID,因此任何应用都只需加载此ID。

这是我使用的代码:

/**
     * Return pseudo unique ID
     * @return ID
     */
    public static String getUniquePsuedoID(Context context) {
        // If all else fails, if the user does have lower than API 9 (lower
        // than Gingerbread), has reset their device or 'Secure.ANDROID_ID'
        // returns 'null', then simply the ID returned will be solely based
        // off their Android device information. This is where the collisions
        // can happen.
        // Thanks http://www.pocketmagic.net/?p=1662!
        // Try not to use DISPLAY, HOST or ID - these items could change.
        // If there are collisions, there will be overlapping data
        String android_id = Settings.Secure.getString(context.getContentResolver(),
                Settings.Secure.ANDROID_ID);
        String m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + android_id + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);
        // Thanks to @Roman SL!
        // https://stackoverflow.com/a/4789483/950427
        // Only devices with API >= 9 have android.os.Build.SERIAL
        // http://developer.android.com/reference/android/os/Build.html#SERIAL
        // If a user upgrades software or roots their device, there will be a duplicate entry
        String serial = null;
        try {
            serial = android.os.Build.class.getField("SERIAL").get(null).toString();
            // Go ahead and return the serial for api => 9
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            // String needs to be initialized
            serial = "serial"; // some value
        }
        // Thanks @Joe!
        // https://stackoverflow.com/a/2853253/950427
        // Finally, combine the values we have found by using the UUID class to create a unique identifier
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

相关内容

  • 没有找到相关文章