显示标签为“Android”的博文。显示所有博文
显示标签为“Android”的博文。显示所有博文

2010年9月29日星期三

Android - 例子:3个 Activity 之间的数据传输

本实例演示 activity 之间的互相调用和数据传输。

data transmission between Activities.

IntentTestActivity --> SecondActivity --> ThirdActivity --> SecondActivity --> IntentTestActivity 输出结果

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">
 <TextView
  android:id="@+id/textView"
     android:layout_width="fill_parent"
     android:layout_height="70px"/>
</LinearLayout>


package com.dearpeople.android.test.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class IntentTestActivity extends Activity {
   
 TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textView = (TextView)this.findViewById(R.id.textView);
       
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("sampleData", "This is Sample Data");
        startActivityForResult(intent, 1);
    }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(resultCode==RESULT_OK && requestCode==1){
   String msg = data.getStringExtra("returnedData");
   textView.setText(msg);
  }
 }
}



package com.dearpeople.android.test.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class SecondActivity extends Activity {
 Intent intent;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  intent= getIntent();
  String msg = intent.getStringExtra("sampleData");
  msg += ", Added at Second";
 
  Intent intent2 = new Intent(this, ThirdActivity.class);
  intent2 .putExtra("sampleData", msg);
  startActivityForResult(intent2, 10);
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(resultCode==RESULT_OK && requestCode==10){
   String msg = data.getStringExtra("returnedData");
   intent.putExtra("returnedData", msg);
   setResult(RESULT_OK, intent);
   finish();
  }
 }
}



package com.dearpeople.android.test.intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class ThirdActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Intent intent= getIntent();
  String msg = intent.getStringExtra("sampleData");
  msg += ", Added at Third";
  intent.putExtra("returnedData", msg);
  setResult(RESULT_OK, intent);
  finish();
 }
}


--
yaoms

Android - 让 Service 随系统的启动自动启动

在 Android系统中如果需要一个服务自动随系统的启动而启动,实现的思路是:

  1. 在Android 启动完成时会自动发出一个广播: android.intent.action.BOOT_COMPLETED。
  2. 我们要做的是顶一个广播接收器 BroadcastReceiver ,在其 intent-filter 段中定义 一条 BOOT_COMPLETED的action。
  3. 在这个Receiver 的 onReceive方法中启动指定的服务。

相关代码片段:
Receiver:


import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class ServiceLoader extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent serviceIntent = new Intent();
        serviceIntent.setAction("my.package.LCService");
        context.startService(serviceIntent);
    }
}

AndroidManifest.xml:

...
        <receiver android:name="ServiceLoader">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                <category android:name="android.intent.category.HOME"></category>
            </intent-filter>
        </receiver>
...

在要启动的 Service 的 intent-filter段中需要定义 my.package.LCService 的action。

--
yaoms

简单记录一下我的刷机经历

G2:

  1. 关机后,按 开关机键+Home(小房子键),启动到 Recovery 模式,查看其版本,如果看到感叹号图标,表示Recovery 版本较低,不能刷机,刷机之前需要先刷 Recovery。如果看到了 1.5.2或者 1.6.2 的字样,证明你的 Recovery版本满足刷机要求。请直接转到第8步。
  2. 现在开始刷新Recovery。关机后,按 开关机键+返回键(带箭头的),启动到 HBoot 模式,记下这个屏幕显示的信息。然后在网上搜索对应的 1.5.2以上的 Recovery 的 img 。下载回来后记得验证一下 其MD5值,确保下载到的是完整的 img。(我曾经下载了一个错误的img,大小只有51k,看都没看刷进去,差点变砖头。结果后来才发现那个文件的内容其实是 html 的代码。)
  3. 下载后,将其拷贝到 SD 的根目录下,最好改一个简短的文件名,例如 rec.img。然后将SD卡插入手机,正拆机后,连接USB线,进入调试模式。(前提是已经安装好 Android SDK 和 USB驱动等)。
  4. 在命令行终端中,输入: adb shell ,看能不能得到一个 # 提示符。
  5. 在 # 提示符下输入以下命令刷新 Recovery : flash_image recovery /sdcard/rec.img,并回车。
  6. 如果一切正常的话,不会有任何输出的退出,返回到 # 提示符。现在 Ctrl+D回车退出 adb shell 模式。
  7. 将手机和USB线断开,按照步骤1的方式再看看现在 Recovery 的版本。如果看到了新的界面,并看到1.5.2的版本号,证明Recovery刷成功了。
  8.  将下载到的合适的ROM文件包(标准zip包)复制到 SD卡的跟目录。最好将文件名改为 update.zip。
  9. 按照第一步的方式进入Recovery模式,先备份以下现在的系统,备份子文件会自动建立在SD的 nandroid文件夹中。
  10. 然后选择清除数据: wipe data.
  11. 最后选择 flash update.zip 或者 flash any zip 之类的菜单开始刷机。这个过程比较长,可以起来转转,喝喝水。
  12. 等刷新完成之后。选择重启系统。
  13. 刷机之后的第一次启动,需要花费很长的时间,要耐心等待。
  14. 大约5分钟之后,进入新系统,设置时间市区Google账号等。享受新系统吧。
G3刷机大体相似。只是需要的软件包要对应,注意核对软件包提供者给出的各类版本信息和自己手机的HBoot里面的信息。

--
yaoms

Android - 发送文本短信: SmsManager

从Android中发送文本短信很简单,只需要以下代码片段:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("10086", null, "你好,10086", null, null);