当前位置:  编程技术>移动开发
本页文章导读:
    ▪googlemapdemo        google地图demo --------------------------------------------准备工作----------------------------------------- 官网文档地址:https://developers.google.com/maps/documentation/android/ 按照文档申请API_KEY,安装Google Play services .........
    ▪ 准确了解ROM,基带,以及RIL        正确了解ROM,基带,以及RIL 一、正确了解ROM,基带,以及RIL。      1)、ROM            对于android手机来说,在刷机这个问题上所指的ROM,即是操作系统,XX版本的ROM,就是XX版本的系.........
    ▪ Resource-type->Color State List Resource       Resource-type-->Color State List Resource Color State List Resource ColorStateList 可以用XML定义,并且可以用到View文字上。   文件存放位置:  res/color/filename.xml   语法:   <?xml version="1.0" encoding="utf-8"?>.........

[1]googlemapdemo
    来源: 互联网  发布时间: 2014-02-18
google地图demo

--------------------------------------------准备工作-----------------------------------------

官网文档地址:https://developers.google.com/maps/documentation/android/

按照文档申请API_KEY,安装Google Play services

--------------------------------------------AndroidManifest.xml---------------------------

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.zfibs.travels"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />

 

    <uses-feature

        android:glEsVersion="0x00020000"

        android:required="true" />

 

    <permission

        android:name="com.zfibs.travels.permission.MAPS_RECEIVE"

        android:protectionLevel="signature" />

 

    <uses-permission android:name="com.zfibs.travels.permission.MAPS_RECEIVE" />

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <!-- The following two permissions are not required to use     Google Maps Android API v2, but are recommended. -->

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    

    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

   

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.zfibs.travels.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

 

        <activity android:name=".MapActivity"></activity>

        <meta-data

            android:name="com.google.android.maps.v2.API_KEY"

            android:value="AIzaSyBZpHp0fZJktlQlvb8czIP_hEAaZYPLd8w" />

    </application>

 

</manifest>

--------------------------------------------Layout  activity_main.xml--------------------

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

 

    <Button

        android:id="@+id/loaction_but"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/loaction_str" />

 

    <Button

        android:id="@+id/scenic_but"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/scenic_str" />

 

    <Button

        android:id="@+id/hostel_but"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/hostel_str" />

 

    <Button

        android:id="@+id/restaurant_but"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/restaurant_str" />

 

    <Button

        android:id="@+id/shop_but"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/shop_str" />

 

    <Button

        android:id="@+id/draw_line"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="@string/draw_line" />

 

</LinearLayout>

--------------------------------------------Layout  activity_map.xml---------------------

<fragment xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/map"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

     />

--------------------------------------------Activity  MainActivity.java--------------------

public class MainActivity extends Activity {

 

/** 当前位置按钮 */

private Button loaction_but = null;

/** 风景按钮 */

private Button scenic_but = null;

/** 旅店按钮 */

private Button hostel_but = null;

/** 餐厅按钮 */

private Button restaurant_but = null;

/** 购物按钮 */

private Button shop_but = null;

/** 多点连线 */

private Button draw_line = null;

/** 跳转意图 */

private Intent activityIntent = null;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

findViews();

setListeners();

activityIntent = new Intent(this, MapActivity.class);

}

 

private void findViews() {

loaction_but = (Button) findViewById(R.id.loaction_but);

scenic_but = (Button) findViewById(R.id.scenic_but);

hostel_but = (Button) findViewById(R.id.hostel_but);

restaurant_but = (Button) findViewById(R.id.restaurant_but);

shop_but = (Button) findViewById(R.id.shop_but);

draw_line = (Button) findViewById(R.id.draw_line);

}

 

private void setListeners() {

loaction_but.setOnClickListener(new OnClickListenerImpl(0));

scenic_but.setOnClickListener(new OnClickListenerImpl(1));

hostel_but.setOnClickListener(new OnClickListenerImpl(2));

restaurant_but.setOnClickListener(new OnClickListenerImpl(3));

shop_but.setOnClickListener(new OnClickListenerImpl(4));

draw_line.setOnClickListener(new OnClickListenerImpl(5));

}

 

/* 设置按钮的事件类 */

public class OnClickListenerImpl implements OnClickListener {

private int index = 0;

 

/** 构造方法 */

public OnClickListenerImpl(int index) {

this.index = index;

}

 

@Override

public void onClick(View v) {

activityIntent.putExtra("index", index);

startActivity(activityIntent);

}

}

 

}

--------------------------------------------Activity  MapActivity.java---------------------

package com.zfibs.travels;

 

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import android.app.ProgressDialog;

import android.content.Context;

import android.graphics.Color;

import android.location.Criteria;

import android.location.Location;

import android.location.LocationListener;

import android.location.LocationManager;

import android.os.AsyncTask;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.util.Log;

import android.view.KeyEvent;

import android.view.Menu;

import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;

import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.SupportMapFragment;

import com.google.android.gms.maps.UiSettings;

import com.google.android.gms.maps.model.BitmapDescriptorFactory;

import com.google.android.gms.maps.model.CameraPosition;

import com.google.android.gms.maps.model.LatLng;

import com.google.android.gms.maps.model.MarkerOptions;

import com.google.android.gms.maps.model.Polyline;

import com.google.android.gms.maps.model.PolylineOptions;

 

public class MapActivity extends FragmentActivity {

private static final String api_key = "AIzaSyBZpHp0fZJktlQlvb8czIP_hEAaZYPLd8w";

private static final int radius = 5000;

private static final String language = "zh-CN";

private static final String keywords = "";

/** Google地图类 */

private static GoogleMap googleMap = null;

/** 位置管理器类 */

private LocationManager locationManager = null;

/** 查询得到多点List */

private List<LatLng> liLatLngs = null;

/** Google地图UI设置实体类 */

private UiSettings uiSettings = null;

/** 查询附近信息返回的List信息 */

private List<Map<String, String>> listMaps = null;

/** 最佳的Provide */

private String fineProvide = "";

/** 当前位置信息 */

private LatLng latLng = new LatLng(42.730070, -73.690570);

/** 搜索位置详细信息 */

private Map<String, String> locatInfo = null;

 

/** 查询时候的进度框 */

private ProgressDialog progressDialog = null;

/** 查询附近信息的Type值 */

private String types = "";

/** Google地图工具类 */

private GoogleUtil googleUtil = null;

/** 匹配的名称 */

private String name = "";

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_map);

initActivityData();

dome(this.getIntent().getIntExtra("index", 0));

}

 

/**

 * 初始化Activity基础数据信息

 */

private void initActivityData() {

// 初始化地图信息

SupportMapFragment supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

googleMap = supportMapFragment.getMap();

 

if (null != googleMap) {

uiSettings = googleMap.getUiSettings();

uiSettings.setMyLocationButtonEnabled(true);

} else {

Toast.makeText(this, "加载地图失败", Toast.LENGTH_SHORT).show();

}

googleUtil = new GoogleUtil();

// 初始化位置管理器

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

getFineProvider();

locationManager.requestLocationUpdates(fineProvide, 1000, 0, locationListener);

}

 

private void dome(int index){

 

switch (index) {

case 0:

getFineProvider();// 获取当前位置的坐标

new SearchAsyncTask(0).execute();

break;

case 1:// 风景

types = "painter";

new SearchAsyncTask(1).execute();

break;

case 2:// 旅馆

types = "lodging";

new SearchAsyncTask(1).execute();

break;

case 3:// 餐厅

types = "food|restaurant";

new SearchAsyncTask(1).execute();

break;

case 4:// 购物

types = "shopping_mall";

new SearchAsyncTask(1).execute();

break;

case 5:// 多点连线

dealListPoints();

break;

}

}

/**

 * 处理多个点连线的信息

 */

private void dealListPoints() {// 根据数据库查询经过的经度和纬度信息

liLatLngs = new LinkedList<LatLng>();

liLatLngs.add(new LatLng(37.35, -122.0));

liLatLngs.add(new LatLng(37.45, -122.0));

liLatLngs.add(new LatLng(37.45, -122.2));

liLatLngs.add(new LatLng(37.35, -122.2));

liLatLngs.add(new LatLng(37.35, -122.0));

PolylineOptions rectOptions = new PolylineOptions().addAll(liLatLngs);

Polyline polyline = googleMap.addPolyline(rectOptions);

polyline.setColor(Color.RED);

for (int i = 0; i < liLatLngs.size(); i++) {

// 设置标识信息

googleMap.addMarker(new MarkerOptions().position(liLatLngs.get(i)).title("名称").snippet("描述...")

.icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

if (i == liLatLngs.size() - 1) {

setMapCenter(liLatLngs.get(i));

}

}

}

 

/**

 * 获取最佳LocationProvifer

 */

@SuppressWarnings("unused")

private void getFineProvider() {

Criteria criteria = new Criteria();

criteria.setAccuracy(Criteria.ACCURACY_FINE); // 高精度

criteria.setAltitudeRequired(false); // 不要求海拔

criteria.setBearingRequired(false); // 不要求方位

criteria.setCostAllowed(false); // 不允许有话费

criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗

this.fineProvide = locationManager.getBestProvider(criteria, true);

if (null == this.fineProvide) {

this.fineProvide = LocationManager.GPS_PROVIDER;

}

Location location = null;

// while (null != location) {

location = locationManager.getLastKnownLocation(fineProvide);

// }

if (null != location) {

latLng = new LatLng(location.getLatitude(), location.getLongitude());

setMapCenter(latLng);

} else {

Toast.makeText(this, "定位失败!", Toast.LENGTH_SHORT).show();

}

}

 

/**

 * 处理搜索和定位的信息类

 * 

 * @author fy

 * 

 */

private class SearchAsyncTask extends AsyncTask<Integer, String, Integer> {

private int index = 0;

 

public SearchAsyncTask(int index) {

this.index = index;

progressDialog = ProgressDialog.show(MapActivity.this, "请稍等...", "获取数据中...", true);

progressDialog.setCancelable(true);

}

 

@Override

protected void onPostExecute(Integer result) {

super.onPostExecute(result);

// 更新UI

if (this.index == 0) {

if (null != locatInfo) {

googleMap.addMarker(new MarkerOptions().position(latLng).title(locatInfo.get("name"))

.snippet(locatInfo.get("address")).icon(BitmapDescriptorFactory.fromResource(R.drawable.location)));

setMapCenter(latLng);

}

} else {

if (null != listMaps && listMaps.size() > 0) {

for (int i = 0; i < listMaps.size(); i++) {

// 设置标识信息

googleMap.addMarker(new MarkerOptions().position(latLng).title(listMaps.get(i).get("name"))

.snippet(listMaps.get(i).get("address")).icon(BitmapDescriptorFactory.fromResource(R.drawable.arrow)));

}

}

}

}

 

@Override

protected Integer doInBackground(Integer... arg0) {

try {

if (index == 0) {// 定位

if (null != latLng) {

locatInfo = googleUtil.queryByLatLng(latLng, language);

}

} else {// 搜索附近信息

if (null != latLng) {

listMaps = googleUtil.queryByCondition(api_key, latLng, radius, keywords, language, name, types);

}

}

} catch (Exception e) {

e.printStackTrace();

}

progressDialog.dismiss();

return null;

}

}

 

/**

 * 位置发生改变时候的监听器

 */

LocationListener locationListener = new LocationListener() {

 

// Provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数

@Override

public void onStatusChanged(String provider, int status, Bundle extras) {

 

}

 

// Provider被enable时触发此函数,比如GPS被打开

@Override

public void onProviderEnabled(String provider) {

 

}

 

// Provider被disable时触发此函数,比如GPS被关闭

@Override

public void onProviderDisabled(String provider) {

 

}

 

// 当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发

@Override

public void onLocationChanged(Location location) {

if (location != null) {

latLng = new LatLng(location.getLatitude(), location.getLongitude());

Log.i("fy", "经度" + location.getLatitude());

Log.i("fy", "纬度" + location.getLongitude());

// Toast.makeText(getApplicationContext(), + "| , Toast.LENGTH_LONG).show();

googleMap.addMarker(new MarkerOptions().position(latLng).title("名称...").snippet("描述..."));

 

}

}

};

 

/**

 * 设置视图的中心

 * 

 * @param latLng

 */

public static void setMapCenter(LatLng latLng) {

// 设置显示的级别

googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));

// Zoom in, animating the camera.

googleMap.animateCamera(CameraUpdateFactory.zoomIn());

// Zoom out to zoom level 10, animating with a duration of 2 seconds.

googleMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2, null);

// 构造一个CameraPosition关注山景和动画镜头的位置。

CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng)// 集映射到中心的山景

.zoom(17).bearing(90) // 设置相机的方向东

.tilt(30) // 设置相机的倾斜30度

.build();

googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

}

 

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

 

return true;

}

 

/***

 * 监听调用返回键的事件

 */

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

if (null != progressDialog && progressDialog.isShowing()) {

progressDialog.dismiss();

} else {

finish();

}

return false;

}

return false;

}

 

@Override

protected void onDestroy() {

if (null != progressDialog) {

progressDialog.cancel();

}

super.onDestroy();

}

}

--------------------------------------------工具类  GoogleUtil.java------------------------

package com.zfibs.travels;

 

import java.io.InputStream;

import java.net.URL;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Scanner;

import org.json.JSONArray;

import org.json.JSONObject;

import com.google.android.gms.maps.model.LatLng;

 

/**

 * Google Map的搜索工具

 * 

 * @author fy

 * 

 */

public class GoogleUtil {

private String URL_API1 = "http://maps.googleapis.com/maps/api/geocode/json?";

private String URL_API2 = "https://maps.googleapis.com/maps/api/place/search/json?";

private static final String API_KEY = "AIzaSyBZpHp0fZJktlQlvb8czIP_hEAaZYPLd8w";

 

/**

 * 根据坐标点 查询当前位置

 * 

 * @param latLng

 * @return

 */

public Map<String, String> queryByLatLng(LatLng latLng, String language) throws Exception {

String URL_API = this.URL_API1;

Map<String, String> map = new HashMap<String, String>();

StringBuffer buf = new StringBuffer();

InputStream input = null;

URL_API += "latlng=" + latLng.latitude + "," + latLng.longitude;

URL_API += "&language=" + language + "&sensor=false";

// http://maps.googleapis.com/maps/api/geocode/json?latlng=,&sensor=false

System.out.print("请求的URL=" + URL_API);

try {

URL url = new URL(/blog_article/URL_API/index.html);

input = url.openStream();

Scanner scan = new Scanner(input);

while (scan.hasNext()) {

buf.append(scan.next()); // 所有的数据都保存在字符串里面

}

} catch (Exception e) {

e.printStackTrace();

throw e;

} finally {

if (input != null) {

input.close();

}

}

System.out.println("查询得到的数据=" + buf.toString());

JSONObject allData = new JSONObject(buf.toString());

// 获取连接状态

String status = allData.getString("status");

if ("OK".equals(status)) {

JSONArray jsonArr = allData.getJSONArray("results");

JSONObject jsonObj = jsonArr.getJSONObject(0);

map.put("address", jsonObj.getString("formatted_address"));

// map.put("icon", jsonObj.getString("icon"));

map.put("name", jsonObj.getString("name"));

System.out.print("查询得到的数据address=" + jsonObj.getString("formatted_address"));

JSONObject locationJsonObj = jsonObj.getJSONObject("geometry").getJSONObject("location");

map.put("latitude", locationJsonObj.getString("lat"));

map.put("longitude", locationJsonObj.getString("lng"));

map.put("status", "OK");

} else {

map.put("status", "FAIL");

}

return map;

}

 

/**

 * 根据传入的条件信息查询附近信息

 * 

 * @param key API 密钥

 * @param location 即要在其周围检索地方信息的纬度/经度。必须指定为纬度、经度。

 * @param radius 范围

 * @param sensor 请求的设备是否会使用 GPS 等位置传感器

 * @param keyword 方建立索引的全部内容相匹配的字词(可选)

 * @param language 语言代码(可选)

 * @param name 地方信息的名称进行匹配的字词(可选)

 * @param types 指定类型相匹配的地方信息,类型应使用竖线符号 (type1|type2|etc) 进行分隔(可选)

 * @return List<Map<String, String>>

 */

public List<Map<String, String>> queryByCondition(String key, LatLng latLng, int radius, String keyword,

String language, String name, String types) throws Exception {

String URL_API = this.URL_API2;

List<Map<String, String>> listMaps = new LinkedList<Map<String, String>>();

// *******************************************组装请求路径信息*********************//

// 例子:https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&types=food&name=harbour&sensor=false&key=AddYourOwnKeyHere

URL_API += "location=" + latLng.latitude + "," + latLng.longitude + "&radius=" + radius + "";

if (null != keyword && keyword.length() > 0) {// 关键词

URL_API += "&keyword=" + keyword;

}

if (null != language && language.length() > 0) {// 语言

URL_API += "&language=" + language;

}

if (null != name && name.length() > 0) {// 匹配名称

URL_API += "&name=" + name;

}

if (null != types && types.length() > 0) {// 类型

URL_API += "&types=" + types;

}

URL_API += "&sensor=true";

URL_API += "&key=" + API_KEY + "";

System.out.print("请求的URL=" + URL_API);

// *******************************************获取查询得到的返回值****//

StringBuffer buf = new StringBuffer();

InputStream input = null;

try {

URL url = new URL(/blog_article/URL_API/index.html);

input = url.openStream();

Scanner scan = new Scanner(input);

while (scan.hasNext()) {

buf.append(scan.next()); // 所有的数据都保存在字符串里面

}

} catch (Exception e) {

e.printStackTrace();

throw e;

} finally {

if (input != null) {

input.close();

}

}

System.out.println("查询得到的数据=" + buf.toString());

JSONObject allData = new JSONObject(buf.toString());

// 获取连接状态

String status = allData.getString("status");

if ("OK".equals(status)) {

JSONArray jsonArr = allData.getJSONArray("results");

for (int i = 0; i < jsonArr.length(); i++) {

Map<String, String> map = new HashMap<String, String>();

JSONObject jsonObj = jsonArr.getJSONObject(i);

map.put("address", jsonObj.getString("formatted_address"));

map.put("icon", jsonObj.getString("icon"));

map.put("name", jsonObj.getString("name"));

System.out.println("查询得到的数据address=" + jsonObj.getString("formatted_address"));

JSONObject locationJsonObj = jsonObj.getJSONObject("geometry").getJSONObject("location");

map.put("latitude", locationJsonObj.getString("lat"));

map.put("longitude", locationJsonObj.getString("lng"));

listMaps.add(map);

}

}

return listMaps;

}

 

}

--------------------------------------------运行效果-----------------------------------------

 

 

 

<!--EndFragment-->
1 楼 AUCKLANDUNI_GQ_MOTO 2013-04-19  
周边信息显示时,在地图上只显示一个marker,不知道为什么?

    
[2] 准确了解ROM,基带,以及RIL
    来源: 互联网  发布时间: 2014-02-18
正确了解ROM,基带,以及RIL

一、正确了解ROM,基带,以及RIL。
      1)、ROM
            对于android手机来说,在刷机这个问题上所指的ROM,即是操作系统,XX版本的ROM,就是XX版本的系统。比如Windows XP系统,微软官方的称呼就是XP,如果该XP是卖到某某地区的定制XP,就被称呼为XX版XP。我们的ROM,也是类似这个概念的。
        2)、基带(Baseband)

     是手机中的一块电路,负责完成移动网络中无线信号的解调、解扰、解扩和解码工作,并将最终解码完成的数字信号传递给上层处理系统进行处理。[1]在我们的手机中通常由两大部分电路组成,一部分是高层处理部分,相当于我们使用的电脑;另一部分就是基带,这部分相当于我们使用的Modem,手机支持什么样的网络制式(GSM、CDMA、WCDMA、TD-SCDMA等) 都是由它来决定的,就像ADSL Modem和普通窄带Modem的区别一样。我们用手机打电话、上网、发短信等等,都是通过上层处理系统下发指令(通常是标准AT指令)给基带部分,并由基带部分处理执行,基带部分完成处理后就会在手机和无线网络间建立起一条逻辑通道,我们的话音、短信或上网数据包都是通过这个逻辑通道传送出去的。 
      刷基带
  而随着软件无线电技术的发展,现在手机中的基带部分基本上都可以利用软件来实现无线信号的解码工作,同时采用软件无线电技术可以方便的实现基带部分的升级,以满足不同的需要或是修正基带部分的BUG。

 

在Android系统中,基带是上层软件与手机中无线设备(手机网络,Wi-Fi,蓝牙等)的驱动程序之间的中介。国外的网络运营商很喜欢锁定基带,从而保证用户只能使用运营商自己指定的sim卡。在我国,锁定基带是非法的,手机制造商、网络运营商也不可以通过锁定基带的方法对待违约客户。iOS的"解锁"就是解锁iOS中的基带软件。

 

       3)、RIL(Radio Interface Layer)
              对于Android系统来说,RIL是基于telephony服务和radio硬件层之间的一个抽象层。
              简单的理解,就是RIL是一段程序,一段指令集合,用于协调电话服务和信号(上面提到的基带)硬件层之间的一种指令集。我认为比较贴切的比喻就是RIL是一种基带的驱动,更好的协调基带为ROM服务。


总结:

ROM作为操作系统,基带作为移动无线网络的基础服务程序(包括语音通话,网络通信等),RIL作为协调2者的关键驱动。
所以,咱们手上的2X,要想很好的为咱们工作,除了刷ROM以外,还要刷和该ROM正确匹配的基带版本,以及与基带版本正确匹配的RIL。
只要这3个东西合作好了,咱们的2X就能摆脱什么,容易发热啊,容易死机啊,自动重启啊,漏接啊,什么的这些问题。


详细刷机教程论坛已经有比较齐全的版本了,我就不多此一举了,而且这里讨论的也不是刷机。

 

因为LG不容易变砖,不同系统不同基带不同国家的,都有自己最理想的配合。刷了其它ROM都不知道自己的RIL是什么版本。而一般分享ROM的楼主也没有放出补丁。

实例: 现在MIUI中国测试版本的RIL 是匹配最早期218基带,但是刷它的用户可能是使用欧版本最新的622基带。这样就会做成问题。

因此,我介绍一个很小的应用程序,它会显示您目前已安装LGE-ril.so 的个版本

 

请检查你目前使用的基带: 设置-关于手机-基带版本。

 

之前很长时间我的测试机galaxy nexus 经常信号断开,就是因为基带和ROM不匹配。单刷ROM也没用,后来在论坛里找到对应版本的基带后,一切恢复正常。


RIL(无线接口层)

手机软件结构分为两个基本层面:基带(baseband)和应用(application)。在其中间的主要连接桥梁就是RIL。 为了连接基带的应用,并允许蜂窝手机网络和用户界面之间的通信,就是RIL的一个逻辑层使用。 这一层中存在的最现代化的移动操作系统架构,需要操作系统和使用的基带芯片之间的紧密集成。在Android的管理是使用RIL守护进程,来连接到供应商的基带。基带的开发和修改是由供应商或手机厂商本身。
因为RIL提供了语音、数据、SMS短信、SIM卡管理以及STK应用的功能,所以不适当的RIL,可以做成“漏接”和“假死”。 (当然“漏接”和“假死”,不单是因为不适当的RIL。)

因为很多实践证明目前大多数RIL驱动“假死”问题,都是由于软件问题而非硬件问题造成的。实际上,系统上出现这种问题也不是很奇怪的,因为出现“假死”的原因主要是因为RIL驱动程序的入口点函数、注册键和GSM模块没有进行适当的交互。因为RIL驱动程序写得是否很好是因人而异的, 毕竟RIL驱动层是用户自己定制的, 而非由Andorid实现的。


    
[3] Resource-type->Color State List Resource
    来源: 互联网  发布时间: 2014-02-18
Resource-type-->Color State List Resource
Color State List Resource

ColorStateList 可以用XML定义,并且可以用到View文字上。

 

文件存放位置:

 res/color/filename.xml

 

语法:

 

<?xml version="1.0" encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] /></selector>

例子:

 

定义,/res/color/button_text_color.xml

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused 在键盘手机上才会显示效果 --> 
    <item android:color="#ff000000"/> <!-- default -->
</selector>


应用:

 

 

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text_color" />



 

 

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3