• Android开发学习日记--利用元数据传递配置文件


    一、效果展示

    二、实现步骤

          尽管资源文件能够配置字符串参数,然而有时候为安全起见,某个参数要给某个活动专用,并不希望其 他活动也能获取该参数,此时就不方便到处使用getString 了。好在 Activity 提供了元数据( Metadata ) 的概念,元数据是一种描述其他数据的数据,它相当于描述固定活动的参数信息。打开 AndroidManifest.xml,在测试活动的 activity 节点内部添加 meta-data标签,通过属性 name 指定元数据 的名称,通过属性value指定元数据的值。
    1. 在AndroidManifest.xml文件添加元数据
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    3. package="com.example.helloworld">
    4. <application
    5. android:allowBackup="true"
    6. android:icon="@mipmap/ic_launcher"
    7. android:label="@string/app_name"
    8. android:roundIcon="@mipmap/ic_launcher_round"
    9. android:supportsRtl="true">
    10. <activity
    11. android:name=".MainActivity"
    12. android:launchMode="standard"
    13. android:theme="@style/Theme.AppCompat.Light"
    14. android:exported="true">
    15. //添加在这里
    16. <meta-data android:name="slogan" android:value="hello world!" />
    17. <intent-filter>
    18. <action android:name="android.intent.action.VIEW" />
    19. <action android:name="android.intent.action.MAIN" />
    20. <category android:name="android.intent.category.LAUNCHER" />
    21. </intent-filter>
    22. </activity>
    23. </application>
    24. </manifest>

    2.配置好了activity节点的meta-data标签,再回到Java代码获取元数据信息,获取步骤分为下列3步:

    1. 调用getPackageManager方法获得当前应用的包管理器。
    2. 调用包管理器的getActivityInfo方法获得当前活动的信息对象。
    3. 活动信息对象的 metaData Bundle 包裹类型,调用包裹对象的 getString 即可获得指定名称的参数 值。

    XML代码:

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:tools="http://schemas.android.com/tools"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent"
    6. android:orientation="vertical"
    7. android:gravity="center"
    8. tools:context=".MainActivity">
    9. <Button
    10. android:id="@+id/request"
    11. android:layout_width="match_parent"
    12. android:layout_height="wrap_content"
    13. android:text="发送"
    14. />
    15. <TextView
    16. android:id="@+id/t1"
    17. android:layout_width="match_parent"
    18. android:layout_height="wrap_content"
    19. android:gravity="center"
    20. android:textColor="#000000"
    21. />
    22. </LinearLayout>

    Java代码:

    1. import android.content.pm.ActivityInfo;
    2. import android.content.pm.PackageManager;
    3. import android.os.Bundle;
    4. import android.view.View;
    5. import android.widget.TextView;
    6. import androidx.annotation.Nullable;
    7. import androidx.appcompat.app.AppCompatActivity;
    8. public class MainActivity extends AppCompatActivity{
    9. @Override
    10. protected void onCreate(@Nullable Bundle savedInstanceState) {
    11. super.onCreate(savedInstanceState);
    12. setContentView(R.layout.activity_main);
    13. TextView textView=findViewById(R.id.t1);
    14. findViewById(R.id.request).setOnClickListener(new View.OnClickListener() {
    15. @Override
    16. public void onClick(View v) {
    17. try {
    18. PackageManager pa = getPackageManager(); //获取应用包管理器
    19. //从应用包管理器获取当前应用信息
    20. ActivityInfo act=pa.getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
    21. Bundle bundle=act.metaData; //获取活动附加的元数据信息
    22. String value=bundle.getString("slogan"); //从包裹中取出名为slogan的字符串
    23. textView.setText(value);
    24. } catch (PackageManager.NameNotFoundException e) {
    25. e.printStackTrace();
    26. }
    27. }
    28. });
    29. }
    30. }

  • 相关阅读:
    C++ 类的前置声明
    Sublime Text 4 for Mac激活下载
    Python画图系列——折线图
    手把手教你在windows上安装mysql8.0最新版本数据库,保姆级教学
    echarts-地图使用/配合散点图展示空气质量
    大型网站系统架构演化实例_2.使用缓存改善网站性能
    2024双非网安捡漏华五0854经验分享
    玩转Redhat Linux 8.0【小测验2】有答案!
    iOS打包错误The operation couldn’t be completed. (AppThinning.StubError error 1.)
    day08PKI以及综合实验
  • 原文地址:https://blog.csdn.net/m0_52238102/article/details/125539578