昨日,广东省高级人民法院在官方微博上发布预告称,北京奇虎科技有限公司诉腾讯科技(深圳)有限公司、深圳市腾讯计算机系统有限公司滥用市场支配地 位纠纷一案将于今日上午9时30分在广东省高级人民法院宣判。专家认为,这是中国互联网首例反垄断官司,其宣判结果将对中国互联网行业产生较大影响。昨 日,腾讯和奇虎360双方均表示不方便评论。
核心是互联网业市场界定
“3Q大战”是一场 由360针对腾讯推出“隐私保护器”和“扣扣保镖”引发的纷争,腾讯认为360此举存在不正当竞争,于是在2010年11月3日,腾讯突然发布“致广大 QQ用户的一封信”,决定将在装有360软件的电脑上停止运行QQ软件。导致“3Q大战”发展到白热化程度。在工信部的介入下,360公司召回了“360 扣扣保镖”软件,腾讯公司也恢复了webQQ的登录,QQ和360恢复兼容。
不过随后,腾讯在广东高院起诉奇虎360不正当竞争。而奇虎360则起诉腾讯滥用市场支配地位。360的1.5亿元和腾讯的1.25亿元相互索赔,也成为中国互联网历史上涉及金额最大的两家公司之间的诉讼案件。
去 年4月18日,奇虎360在广东省高院起诉腾讯滥用市场支配地位的诉讼率先开庭。奇虎360请求法院判令腾讯公司立即停止滥用市场地位,停止实施QQ软件 用户不得与原告交易并捆绑搭售行为。奇虎360称腾讯在“3Q大战”期间滥用其即时通讯工具QQ的市场支配地位,强制用户卸载已安装的360软件,属垄断 行为。
为此 ,奇虎360向腾讯索赔1.5亿元,并公开赔礼道歉。腾讯则请求法院驳回360全部诉讼请求。昨日一位律师认为, 该案的核心恐怕不在于滥用行为的认定及损害赔偿的确定,而是互联网行业相关市场的界定。
背后较量:
“反360”联盟再次壮大
背 后的较量仍在继续,并且有着扩大化的趋势。早在“3Q大战”期间,百度、金山网络、腾讯就曾经结盟,使3Q大战最终由公司间的战争升级为联盟间的战争。随 后,腾讯注资金山网络。2011年8月25日,腾讯与经纬创投以1860万美元(约合人民币1.202亿元)购得金山1.024亿股优先股,对金山网络的 估值为1.63亿美元。
近期以来,“反360”联盟再次壮大。去年在杭州举办的AVAR国际反病毒安全会议上,腾讯、百度和金山网络已经坐 在了一起,大有在安全领域“合围”360的势头。最近,百度入股金山网络的传闻甚嚣,一旦成为事实,将被视为百度、腾讯、金山网络三家公司的再度结盟。其 中,金山网络成了最大的受益者—,不仅获得腾讯的注资,也获得了腾讯的流量资源。瑞信在最新报告中称,当年腾讯投资金山,目的是让反病毒软件与自有产品集 成,提供保护。而如今百度入股金山的目的是利用金山的产品打击奇虎360,影响其浏览器份额,损害其搜索份额。
对此,360董事长周鸿祎反驳这是一个“笑话”。他称,任何结盟都应以用户利益来考量,而非利用垄断地位争夺用户,不应以遏制对手发展为目标。而360总裁齐向东则称,百度、金山、腾讯三方各有各的优势,也有直接利益冲突,合作貌合神离,可以说是“三个和尚没水喝”。
有专家认为, 腾讯QQ、百度和奇虎360仍然在明争暗斗,如果真的为用户着想就和平解决问题,恶性竞争最后受伤的一定是广大用户。
main.xml配置
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:id="@+id/list" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:gravity="bottom">
<Button android:id="@+id/pre" android:text="@string/pre"
android:layout_width="wrap_content" android:layout_height="wrap_content"
/>
<Button android:id="@+id/next" android:text="@string/next"
android:layout_width="wrap_content" android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
lvdata.xml配置
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<TextView android:id="@+id/lv_name"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:textSize="15dip" android:textColor="#ffffff" />
<TextView android:id="@+id/lv_phone"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignRight="@id/lv_name"
android:layout_below="@id/lv_name"
android:textSize="16dip" android:textColor="#00ffff" />
</RelativeLayout>
string.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">联系人应用</string>
<string name="pre">上一页</string>
<string name="next">下一页</string>
<string name="page">分页</string>
</resources>
在AndroidManifest.xml中配置权限
<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
java代码
package com.contacts;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView lv;
private Button bt1,bt2;
private MyAdapter myadapter;
private View.OnClickListener vc;
private int VIEW_COUNT = 10;
private int index = 0;
private List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
private Map<String,Object> map;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[]{CommonDataKinds.Phone.NUMBER,CommonDataKinds.Phone.DISPLAY_NAME}, null, null, null);
while(cursor.moveToNext()){
map = new HashMap<String,Object>();
//获取联系人姓名
map.put("name", cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
//获取联系人电话
map.put("phone", cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
list.add(map);
}
vc = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pre:
leftView();
break;
case R.id.next:
rightView();
break;
}
}
};
//关闭cursor
cursor.close();
bt1.setOnClickListener(vc);
bt2.setOnClickListener(vc);
checkButton();
myadapter = new MyAdapter(this);
lv.setAdapter(myadapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("您确定要打电话?");
builder.setMessage("打电话功能");
builder.setIcon(R.drawable.icon);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
which = position + index * VIEW_COUNT;;
String phone = list.get(which).get("phone").toString();
Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phone));
startActivity(intent);
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.create().show();
}
});
}
private void initView() {
lv = (ListView)findViewById(R.id.list);
bt1 = (Button)findViewById(R.id.pre);
bt2 = (Button)findViewById(R.id.next);
}
public void leftView() {
index--;
myadapter.notifyDataSetChanged();
checkButton();
}
public void rightView() {
index++;
myadapter.notifyDataSetChanged();
checkButton();
}
public void checkButton() {
// 索引值小于等于0,表示不能向前翻页了,以经到了第一页了。
// 将向前翻页的按钮设为不可用。
if (index <= 0) {
bt1.setEnabled(false);
}
// 值的长度减去前几页的长度,剩下的就是这一页的长度,如果这一页的长度比View_Count小,表示这是最后的一页了,后面在没有了。
// 将向后翻页的按钮设为不可用。
else if (list.size() - index * VIEW_COUNT <= VIEW_COUNT) {
bt2.setEnabled(false);
} else {
bt1.setEnabled(true);
bt2.setEnabled(true);
}
}
class MyAdapter extends BaseAdapter{
private Activity activity;
public MyAdapter(Activity activity){
this.activity = activity;
}
@Override
public int getCount() {
// ori表示到目前为止的前几页的总共的个数。
int ori = VIEW_COUNT * index;
/**
* 值的总个数-前几页的个数就是这一页要显示的个数,如果比默认的值小,说明这是最后一页, 只需显示这么多就可以了
*/
if (list.size() - ori < VIEW_COUNT) {
return list.size() - ori;
}
// 如果比默认的值还要大,说明一页显示不完,还要用换一页显示,这一页用默认的值显示满就可以了。
return VIEW_COUNT;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(activity).inflate(R.layout.lvdata, parent,false);
}
TextView name = (TextView)convertView.findViewById(R.id.lv_name);
TextView phone = (TextView)convertView.findViewById(R.id.lv_phone);
Map<String,Object> map = (Map<String, Object>) list.get(position + index * VIEW_COUNT);
if(map != null){
name.setText(map.get("name").toString());
phone.setText(map.get("phone").toString());
}
return convertView;
}
}
}
最近在用腾讯微博的api时候,认证的时候发现有腾讯微博的redirectUri 10051错误,百度了一下说是没有填对redirecturi 我勒个去哪里有redirecturi呢,找了半天原来是
尼玛的写的说明是个啥啊,明明是应用网址变成了回调地址,腾讯蛋碎了。。。