当前位置:  编程技术>移动开发
本页文章导读:
    ▪数据保存到sd卡下        数据保存到sd卡上 1 关键代码   package cn.lee.data; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException; import cn.lee.Manager.DataManager;import android.app.Activity;import android..........
    ▪ 最近打算修改上status_bar_expended,在status bar展开处增加任务管理器        最近打算修改下status_bar_expended,在status bar展开处增加任务管理器     打算在status bar展开的时候增加可以删除停止运行程序的任务管理器。发现涉及到的文件,主要有位于\frameworks\base\core\.........
    ▪ Activity之间的互相调用与传递参数       Activity之间的相互调用与传递参数   Activity之间的相互调用与传递参数 作者:LEGEND QQ:158067568 Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android.........

[1]数据保存到sd卡下
    来源: 互联网  发布时间: 2014-02-18
数据保存到sd卡上

1 关键代码

 

package cn.lee.data;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import cn.lee.Manager.DataManager;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class AboutDateActivity extends Activity {
 private EditText fileNameEditText;
 private EditText fileContentEditText;
 private EditText readfileContentEditText;
 private Button button;
 private Button readButton;
 private static final String TAGSTRING = "AboutDateActivity";

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  button = (Button) this.findViewById(R.id.button);
  readButton = (Button) this.findViewById(R.id.readButton);
  fileNameEditText = (EditText) this.findViewById(R.id.fileName);
  fileContentEditText = (EditText) this.findViewById(R.id.fileContent);
  readfileContentEditText = (EditText) this
    .findViewById(R.id.readfileContent);

  // 读取
  readButton.setOnClickListener(onClickListener);
  // 保存
  button.setOnClickListener(onClickListener);
 }

 /**
  * 由于这个内部实现类是一个接口的实例 所以这里把他提取出来 作为一个成员变量 2010-04-18
  */
 private View.OnClickListener onClickListener = new View.OnClickListener() {
  /**
   * 由于button的父类是view 所以这里的onclick的参数传来的view v就可以找到这个button
   */
  public void onClick(View v) {
   Button button = (Button) v;// 将父类view强转成子类button
   int info = R.string.sus;  //操作成功
   String fileNameString = fileNameEditText.getText().toString();
   
   /**
    * 判断sd卡是否存在 Environment.getExternalStorageState() 得到sd卡当前的状态
    *
    * getExternalStorageState() returns MEDIA_MOUNTED if the
    * media is present and mounted at its mount point with
    * read/write access. 如果返回 MEDIA_MOUNTED表示外部存储设备存在。并且有读写的权限
    */
   
   if (Environment.getExternalStorageState().equals(
     Environment.MEDIA_MOUNTED)) {
    if ("".equals(fileNameString)) {
     info = R.string.filenamenotnull; //文件名不能为空
    } else {
     FileOutputStream fileOutputStream = null;
     FileInputStream fileInputStream = null;
     try {
      switch (button.getId()) {
      case R.id.button: {// 保存
       String fileContentString = fileContentEditText
         .getText().toString();
       /**
        * Environment.getExternalStorageDirectory();
        * 得到外存储设备的路径
        *
        */
       File file = new File(Environment
         .getExternalStorageDirectory(),
         fileNameString);
       fileOutputStream = new FileOutputStream(file);
       DataManager.saveDate(fileOutputStream,
         fileContentString);
       break;
      }

      case R.id.readButton: {
       fileInputStream = null;
       fileInputStream = AboutDateActivity.this
         .openFileInput(fileNameString);
       String contentString = DataManager
         .readDate(fileInputStream);
       readfileContentEditText.setText(contentString);
       break;
      }
      default:
       break;
      }

     } catch (Exception e) {
      // TODO Auto-generated catch block
      Log.i(TAGSTRING, e.toString());
      info = R.string.infor;
     } finally {
      try {
       if (fileOutputStream != null) {
        fileOutputStream.close();
       }
       if (fileInputStream != null) {
        fileInputStream.close();
       }

      } catch (IOException e) {

       Log.i(TAGSTRING, e.toString());
       info = R.string.infor;
      }
     }

    }
   } else {
    info = R.string.infor;
   }
   Toast.makeText(AboutDateActivity.this, info, 1).show();
  }

 };
}

 

2 资源文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cn.lee.data"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
     <uses-library  android:name="android.test.runner" />
        <activity android:name=".AboutDateActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="7" />
 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.lee.data"
 android:label="Test for my app"/>
 <!-- 允许程序访问外部存储设备 -->
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 <!-- 允许创建和删除外部存储设备的文件 -->
 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
</manifest>

 

 

3 业务service

 

package cn.lee.Manager;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;
import java.io.OutputStream;

public class DataManager {
 /**
  * 没有使用成员变量的方法可以定义为静态方法
  * 保存数据的业务逻辑
  * OutputStream 输出流
  * content 文件内容
  * @throws Exception
  */
 public static void saveDate (OutputStream outputStream , String contentString) throws Exception
 {
  outputStream.write(contentString.getBytes());
  outputStream.close();
 }
 /**
  * 读取数据的业务逻辑
  * @param InputStream
  * @param contentString
  * @throws Exception
  */
 public static  String readDate (InputStream inputStream ) throws Exception
 {
  byte [] byte1 = new byte[1024];
  /**
   * 当输入流读到文件的末尾 返回就是-1
   */
  int length = inputStream.read(byte1);
  ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  if(length!=-1)
  {
   //读到的内容存在内存中ByteArrayOutputStream 这个类用于将byte流存储在内存中
   
   byteArrayOutputStream.write(byte1, 0, length);
  }
  String dateString =   byteArrayOutputStream.toString();
  byteArrayOutputStream.close();
  inputStream.close();
  return dateString;
 }
}


    
[2] 最近打算修改上status_bar_expended,在status bar展开处增加任务管理器
    来源: 互联网  发布时间: 2014-02-18
最近打算修改下status_bar_expended,在status bar展开处增加任务管理器
    打算在status bar展开的时候增加可以删除停止运行程序的任务管理器。发现涉及到的文件,主要有位于\frameworks\base\core\res\res\layout 下面的status_bar_expanded.xml 以及位于 \frameworks\base\services\java\com\android\server\status 下面的StatusBarService.java

    目前,正在进行中,呵呵 感兴趣的朋友一起讨论
1 楼 zsh88241 2011-05-16  
博主,你的这个功能已经做好了吗?能不能写个文章分享一下经验?我是个新手,最近也在研究在展开的status bar上添加一些功能按钮,不知道从哪里下手。
2 楼 ableouou 2011-05-16  
zsh88241 写道
博主,你的这个功能已经做好了吗?能不能写个文章分享一下经验?我是个新手,最近也在研究在展开的status bar上添加一些功能按钮,不知道从哪里下手。

做好了,就是在文中提到的类加入相关的处理代码,

    
[3] Activity之间的互相调用与传递参数
    来源: 互联网  发布时间: 2014-02-18
Activity之间的相互调用与传递参数

 

Activity之间的相互调用与传递参数

作者:LEGEND

QQ:158067568

Activity之间是如何调用的

在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的。

所谓Intent,它是Android中非常重要的内置组件,他可以理解为“我要干一件什么事情”。在Android中有3大组件:Activity,Service、Broadcast,他们之间的通信都是通过Intent来完成的,所以Intent其实就是告诉他们之间的每一个人,要干什么事情。

创建自己的Activity

高焕堂先生的Android讲义中有如下一段内容:

Android的4种嫡系组件(即Activity、Service、IntentReceiver和ContentProvider)之间如何互相沟通呢?这4种嫡系组件都是由Android启动的,并不是组件之间透过直接呼叫而启动的。

这段文字总结的十分精辟,它告诉了读者(以Activity为例)Activity是Android自启动的,这样的话,编程人员必须要明确告诉Android“我的应用程序里面有哪些是你要给我启动的”,而如何告诉Android这些信息呢,Android为我们提供了一个AndroidManifest.xml文件。在这个文件中,就可以告诉Android这些内容。这也是为什么我们在建立了自己的Activity、ContentProvider等之后,必须要在配置文件中进行配置的原因。

以下代码是在自己定义的一个名为SecondActivity的Activity,其配置代码如下:

<activity android:name=".SecondActivity"
         android:label="secondActivity">
</activity>
 

在android:name一项中中的“.”代表在当前配置文件的默认包名之下。

Activity之间的切换

从一个Activity调用另一个Activity,十分简单,只需要创建一个Intent,并且告诉Intent我从哪来,要到哪去,然后执行这个Intent,就可以了。示例代码如下:

Intent i = new Intent(TestActivity.this,SecondActivity.class);

startActivity(i);

当然,这样只能够做到Activity之间的切换,如果想在切换的同时,由旧的Activity向新的Activity传递一些参数,那么就要在startActivity()方法之前,为Intent添加参数,通过putExtra(string,xxx)这组方法,就可实现。

putExtra(string,xxx)方法类似于map,键都是String型,值有不公类型,该方法被重载,具体可参考API,示例代码如下:

                                     Intent i = new Intent(TestActivity.this,SecondActivity.class);
                                     i.putExtra("uName", "legend");
                                     i.putExtra("uAge", (short)18);
                                     startActivity (i);
 

获取Intent传递的值

旧的Activity将值传递给了新的Activity,那么在新的Activity中,要通过getIntent()方法,方可接收传递过来的Intent。得到Intent后通过getxxxExtra()方法,可以取得不同类型的值。如下所示:

                

                 Intent i = getIntent();
     String uName = i.getStringExtra("uName");
                   short uAge = i.getShortExtra("uAge", (short) 0);
 

旧Activity得到新Activity结束后传递的Intent

在开发中,有这种情况,比如说我们的一个Activity要调用一个新的Activity,让后用户对新的Activity操作完成后,关闭新的Activity,这时需要将新的Activity中的一些值传递给旧的Activity。这就中情况不用自己处理,Android已经为我们编写了一个onActivityResult(int requestCode, int resultCode, Intent data)方法,专门处理这种情况。

首先,在旧的Acitvity中的启动Intent方法不能再使用之前的startActivity,而要给用startActivityForResult(i, REQUESTCODE1 );方法,该方法第一个参数为要传递的intent,第二个参数为请求码,该请求码其实就是一个整型变量,用于指明是那个方法、或者说是那个控件启动了该intent,其最主要的目的是在onActivityResult(int requestCode, int resultCode, Intent data)方法中,编程使用。读者这里可以不用深究,看到例子后,便会明白。该处代码如下:

                                

 Intent i = new Intent(TestActivity.this,SecondActivity.class);     
i.putExtra("uName", "legend");
     i.putExtra("uAge", (short)18);
     startActivityForResult(i, REQUESTCODE1 );
 

其次,在新的Activity中要接受刚刚传递的Intent,接受方法如上所述,这里不再赘述。在新的Acitvity处理完成后,需要同过setResult(Intent i)方法来设置新的Activity结束后需要传递会旧的Activity的Intent。之后调用新的Activity的finish()方法,结束新的Acitvity就可以了。代码如下:

 

 

                                     Intent resultIntent = new Intent();
                                     resultIntent.putExtra("uName", "legend2");
                                     resultIntent.putExtra("uAge", (short)22);
                                     setResult(RESULTCODE1, resultIntent);
                                     SecondActivity.this.finish();
 

 

    最后,在旧的Activity中重写onActivityResult(int requestCode, int resultCode, Intent data)方法,该方法的三个参数,这里就不在赘述了,相信读者一看即明白,这里给出代码如下:

                   if(requestCode == REQUESTCODE1){
                            System.out.println("REQUESTCODE equal");
                            if(resultCode == SecondActivity.RESULTCODE1){
                                     System.out.println("RESULTCODE equal");
                                     String uName = data.getStringExtra("uName");
                                     short uAge = data.getShortExtra("uAge", (short)0);
                                     tv.setText("uName:"+uName+" uAge:"+uAge);
                            }
                   }
  参考程序

ActivityTest

补充:

在Intent中,可以携带Object类型的信息,读者查阅API后,可能会放先,putExtra()方法中,并没有实现object的,但是重载了如下的方法:putExtra(String name, Serializable value),只要将对象实现了Serializable接口,就可以添加进Intent了。

对象序列化及反序列化

一个对象产生后,实际上是在内存中开辟了一个存储空间,方便存储信息。

对象的序列化,就是一个对象变成二进制数据流的一种方法,通过对象的序列化可以方便的实现对象的传输与存储。

如果一个类的对象想要被序列化,必须实现Serializable接口,但是该接口中无方法,它属于一个标示接口,表示具备了某种能力。

序列化和反序列化,可以理解为:

序列化:程序àObjectOutputStreamà序列化对象

反序列化:序列化对象àObjectInputStreamà程序

在序列化的时候,可以通过serialVersionUID来标识序列化版本。

值得注意的是,序列化存储的只是对象的成员变量。

ObjectInputStream中的readObject()方法可读取对象。

ObjectOutputStream中的writeObject()方法可写入对象。

transient关键字

在序列化时,可以指定那个成员变量不被序列化,只要在成员变量之前添加transient关键字即可。

参考代码

这部分内容可参考代码:DserPerson,SerPerson,Person。

在Android中实现,可参考代码ActivityTest2

 

 

 

 

 

1 楼 xcs111 2012-05-19  
好贴顶!

    
最新技术文章:
▪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