游戏中接入第三方渠道时 关于meta-data的一些小问题

1.   androidMainifest 中的    ${YourAppX-PromotionKey} 的意思

 <meta-data

            android:name="sandboxConsumerSecret"
            android:value="${YourAppX-PromotionKey}" >

        </meta-data>

需要去添加的,一般内容是sdk方给的一个数据


2. gameId 是可以写死的么 

        <meta-data 
            android:name="gameId" 
            android:value="23000013"> 
        </meta-data>

gameid 是 androidmainifest 的 包名 

3. sdk 集成 xpromotion ?的意思是?


总结:知识点 

androidMainiFest.xml 中 meta-data:


转自:http://blog.csdn.net/wwj_748/article/details/25079991

在接入第三方渠道SDK的时候,经常会看到其配置文件AndroidManifest.xml有类似如下的定义:
[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <!-- appid -->  
  2.        <meta-data  
  3.            android:name="APP_ID"  
  4.            android:value="037810BCE1D2260F32017643AC7D980C" />  
  5.   
  6.        <!-- 发布渠道(可选) -->  
  7.        <meta-data  
  8.            android:name="APP_CHANNEL"  
  9.            android:value="QQ_CENTER" />  
标签<meta-data>是提供组件额外的数据用的,它本身就是一个键值对,可以自定义名称和值。它可以包含在以下组件当中:

这个也是转:

在AndroidManifest.xml中,<meta-data>元素可以作为子元素,被包含在<activity>、<application> 、<service>和<receiver>元素中,但不同的父元素,在应用时读取的方法也不同。

1 :在Activity的应用。
    xml代码段:
   
<activity...>
       <meta-data android:name="myMsg" android:value="hello my activity"></meta-data>
    </activity>
   
    java代码段:
   
ActivityInfo info=this.getPackageManager()
                          .getActivityInfo(getComponentName(),
                          PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

2:在application的应用。
   xml代码段:
  
<application...>
       <meta-data android:value="hello my application" android:name="myMsg"></meta-data>
   </application>
  
   java代码段:
   
 ApplicationInfo appInfo = this.getPackageManager()
                                  .getApplicationInfo(getPackageName(),
                          PackageManager.GET_META_DATA);
    String msg=appInfo.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

3:在service的应用。
   xml代码段:
  
 <service android:name="MetaDataService">
      <meta-data android:value="hello my service" android:name="myMsg"></meta-data>
   </service>

   java代码段:
  
 ComponentName cn=new ComponentName(this, MetaDataService.class);
   ServiceInfo info=this.getPackageManager()
                        .getServiceInfo(cn, PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);

4: 在receiver的应用。
   xml代码段:
   
 <receiver android:name="MetaDataReceiver">
            <meta-data android:value="hello my receiver" android:name="myMsg"></meta-data>
            <intent-filter>
                <action android:name="android.intent.action.PHONE_STATE"></action>
            </intent-filter>
    </receiver>
   java代码段:
   
 ComponentName cn=new ComponentName(context, MetaDataReceiver.class);
    ActivityInfo info=context.getPackageManager()
                             .getReceiverInfo(cn, PackageManager.GET_META_DATA);
    String msg=info.metaData.getString("myMsg");
    System.out.println("myMsg:"+msg);


概念

meta-data就像其名一样,主要用来定义一些组件相关的配置值。

按照官方定义,metadata是一组供父组件使用的名值对(name-value pair),因此相应的meta-data元素应该定义在相应的组件中。即如果想在activity中使用metadata,那么meta-data必须定义在AndroidManifest.xml的activity声明中。

使用

所有的名值对被包装成Bundle供组件使用,因此使用方式同Bundle。metadata普通值由value属性给出,资源ID由resource属性给出。
比如我们定义资源

?
1
2
3
< string name = "x_key" >resource key</ string >
//R
public static final int ic_launcher=0x7f020000;
定义metadata


?
1
2
3
4
5
6
7
8
9
< meta-data
     android:name = "com.xesam.key_1"
     android:value = "x_key" />
< meta-data
     android:name = "com.xesam.key_2"
     android:value = "@string/x_key" />
< meta-data
     android:name = "com.xesam.img"
     android:resource = "@drawable/ic_launcher" />

那么有:

?
1
2
3
metadata.getString("com.xesam.key_1") ==> "x_key"
metadata.getString("com.xesam.key_2") ==> "resource key"
metadata.getInt("com.xesam.img")      ==> 0x7f020000
由于resource指向资源ID,因此用metadata可以定义一些稍微复杂的值。 
比如要定义一副图片,则可以用这个,然后在代码中用getInt()取出图片的ID:
?
1
2
int imageId = meta.getInt( "com.xesam.img" );
((ImageView) findViewById(R.id.img)).setImageResource(imageId);

使用问题

形如:

?
1
2
3
< meta-data
     android:name = "com.xesam.key_1"
     android:value = "000" />
类似这样的值如果使用bundle.getString()的话是不起作用的,因为Bundle中使用的是形如: 
?
1
return (String) o;

的代码获取一个StringValue值的,但是在将metadata包装成bundle的时候,"000"被解析成整数0, 
因此bundle.getString("com.xesam.key_1")返回的是(String)0,显然,java是不允许这样的,因此最后得到的是null。  话说android为什么不是用String.valueOf()或者obj.toString()呢?

为了避免这种情况:
1,可以在形如000的字符串前面放个\0空字符,强迫android按照字符串解析000。
2,在资源文件中指定需要的值,然后在metadata的value中引用此值。

示例代码

附:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//在Activity应用<meta-data>元素。
     ActivityInfo info = this .getPackageManager()
             .getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
     info.metaData.getString( "meta_name" );
 
     //在application应用<meta-data>元素。
     ApplicationInfo appInfo = this .getPackageManager()
             .getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);
     appInfo.metaData.getString( "meta_name" );
 
     //在service应用<meta-data>元素。
     ComponentName cn = new ComponentName( this , MetaDataService. class );
     ServiceInfo info = this .getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
     info.metaData.getString( "meta_name" );
 
     //在receiver应用<meta-data>元素。
     ComponentName cn = new ComponentName(context, MetaDataReceiver. class );
     ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
     info.metaData.getString( "meta_name" );


meta-data官方地址  http://developer.android.com/reference/android/os/Bundle.html







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值