Android教程

来自tomtalk
跳转至: 导航搜索

返回上一级

基础

Hello, World!

代码非常简单,打开src\study.android.HelloWorld\HelloWorld.java 修改为:

package study.android.HelloWorld;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class HelloWorld extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //这三行,显示Hello, World!
        TextView tv = new TextView(this);
        tv.setText("Hello, World!");
        setContentView(tv);
    }
}

设置Android程序图标

1、在res/drawable文件夹下增加应用图标对应的图片文件,如aone.png

建议使用png文件,并将没用的背景设置为透明

建议图片大小为64*64,效果较好

2、在AndroidManifest.xml中给application增加属性icon
<application android:icon="@drawable/aone" android:label="aone">

android:icon表示应用图标对应的资源文件

android:label表示应用程序的名字

项目中出现红色感叹号的解决方法

【问题原因】:工程中classpath中指向的包路径错误

【解决办法】:右键项目名称 BuildPath ---> Configure Build Paht...中,然后上面有几个选项卡找到 Libraries中 出现红色叉号的包为路径错误的包。到classpath中修改相应包的当前路径。然后回到eclipse中F5刷新工程。

下面两段为我解决此问题时在网上找的参考资料,可参阅: 你用myeclipse新建 web工程, 在工程目录下会生成一个 .classpath 配置文件, 里面是你工程里面引用的jar的配置。这个.classpath 对你的web工程没有什么影响 其实是给 myeclipse 识别的。 你说的这种情况是因为 .classpath 文件里面 配置引用了某个jar,但是实际上你的 lib 里面并没有这个jar 所以才会有红色的提示。 你不用拿.classpath文件和你的jar一个个去找, 你现在打开MyEclipse 右键单击你的web工程,找到 Build Path > Configure Build Paht... > 然后上面有几个选项卡找到 Libraries。 这里看到的就是你工程里面引用的 所有的 jar , 看看是不是在某个jar图标上有个很小的黄色的感叹号? 如果有的话就没错了, 先选中这个jar, 点击右边的 Remove > 点击OK 等待几秒, 现在web工程上面的红色XX是不是没有了,哈哈。 解释一下: 黄色的感叹号的jar,表示.classpath配置文件引用了jar, 但是实际上lib里面没有这个jar。

android开源项目

直接拿来用!最火的Android开源项目 http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects

推荐10个Android开源项目 http://www.pin5i.com/showtopic-top-10-android-open-source-project.html

74个Android开发开源项目汇总 http://blog.csdn.net/wuwenxiang91322/article/details/8990406

密西西比河谷州立大学:Android应用程序开发

http://v.163.com/movie/2010/1/8/D/M79HE97C3_M79HEQJ8D.html

使用JSON传递中文参数乱码

http://blog.csdn.net/bonnshore/article/details/18327881

Android拨号器

写完这个拨号器,感慨良多。因刚入门android开发,写的过程,可谓九曲18弯,从搭建开发环境,到完成此拨号器,问题颇多。

写完这个拨号器,我对android的开发环境算是理解、入门了!

public class MyPhoneActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        //设置文本颜色
        ((TextView)this.findViewById(R.id.TextViewInfo)).setTextColor(android.graphics.Color.GREEN);
 
        //获取电话号码文本框对象
        final EditText edtPhone=(EditText)this.findViewById(R.id.editTextPhone);
 
        //获取拨号按钮
        Button btnDial=(Button)this.findViewById(R.id.btnDial);
 
        //用匿名类处理拨号按钮的单击事件...
        btnDial.setOnClickListener(new View.OnClickListener() {
 
			@Override
			public void onClick(View v) {
 
				//获取电话号码		       
		        String strPhone=edtPhone.getEditableText().toString();
 
				//创建拨号意图对象..."android.intent.action.CALL" / Intent.ACTION_CALL
				Intent intent=new Intent("android.intent.action.CALL",Uri.parse("tel:"+strPhone));
 
				//启动意图对象,开始拨号
				//startActivity()内部会添加android.intent.category.DEFAULT
				startActivity(intent);	
			}
		});
    }
}

在Android开发中怎么全屏显示

package net.tomtalk.memorize;
 
import net.tomtalk.memorize.util.SystemUiHider;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.view.Window; 
import android.view.WindowManager;
 
public class FullscreenActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        //隐去标题栏(应用程序的名字)  
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
 
        //隐去状态栏部分(电池等图标和一切修饰部分)
        this.getWindow().setFlags(
    	    WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        );
 
        TextView tv = new TextView(this);
        tv.setText("Hello, World!");
        setContentView(tv);
 
    }  
}

Receiving JSON from REST Service

http://hmkcode.com/android-parsing-json-data/

判断文件是否存在

File f = context.getFilesDir();
String fileName = f.getAbsolutePath() + "/ca.crt";
File file = new File(fileName);
if (file.exists()) {
    return false;
}
 
return true;

android 网络状态判断

首先需要加入权限

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

查网络状态

public boolean CheckNetworkState()    {
    boolean flag = false;
    ConnectivityManager manager = (ConnectivityManager)getSystemService( Context.CONNECTIVITY_SERVICE);
 
    if (manager.getActiveNetworkInfo() != null) {
        flag = manager.getActiveNetworkInfo().isAvailable();
    }
 
    if (!flag) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setTitle(R.string.netstate);
        builder.setMessage(R.string.setnetwork);
 
        builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                Intent mIntent = new Intent("/");
                ComponentName comp = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings");
                mIntent.setComponent(comp);
                mIntent.setAction("android.intent.action.VIEW");
                startActivity(mIntent);
            }
        });
 
        builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        builder.create();
        builder.show();
    }
 
    return flag;
}

android应用的本地存储

public int getUid() {
	String filename = "memorizeSetting";
	SharedPreferences setting = getSharedPreferences(filename, Context.MODE_PRIVATE);
 
	if (setting.getInt("uid", 0) == 0) {
	    int uid = 100;
	    Editor editor = setting.edit();
	    editor.putInt("uid", uid);
	    editor.commit();
	}
 
	return setting.getInt("uid", 0);
}

SQLite关系型数据库

http://blog.csdn.net/omg_2012/article/details/8041186

SQLite的使用示例

http://blog.csdn.net/liuhe688/article/details/6715983

SlidingMenu开源项目

导入 http://blog.csdn.net/top_code/article/details/17336203

使用示例(一) http://blog.csdn.net/top_code/article/details/17354023

使用示例(二) http://blog.csdn.net/top_code/article/details/17355969

提示应用程序未安装的解决方法

有时候,在给自己的安卓爱机安装软件或者打开某个软件的时候,手机会提示应用程序未安装,一般来说出现这种提示,有以下三个原因。

一,很多人在Android2.2开启APP2SD之后如果安装程序时死机或者遇到其他情况,当再次安装程序会提示”应用程序未安装”,从而安装程序失败。解决方法:储存模式连接电脑找到SD卡目录下的.android_secure文件夹,里面应该会有一个smdl2tmp1.asec,也可能是其他名称,总之与正常程序命名格式明显不一样的文件,删除,再次安装软件,看看是不是好了。


二,打开设置-管理应用程序用系统自带的程序管理查看SD卡上的程序时,有的程序是没有彩色图标的,原来就是这些没有图标的软件在作怪,这些没有图标的软件就是以前一些没有正确安装或者卸载不完全软件数据,如果你再次安装就会报错,现在我们用系统自带的软件管理把它们卸载干净,再次安装软件时就不会出错了.


三,还有一部分因为软件签名更改了,所以不能覆盖安装,直接删除重新安装新的版本即可。


四,Android APK安装失败,共享用户不兼容 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE那首先你看你的手机内存是不是已经满了,或者要安装的软件以前安装过没有卸载干净,如果排除这两个问题就要看看决方法格式化sd卡就可以了一般出现这个提示可以分别使用下面两种方法试一下(针对开发者和用户):

1、APK没有使用签名,一般是开发人员的问题,在项目上点右键-Export signed appication package...(生成自己的签名然后)导入即可。这种适用于在调试时候可以使用,但是安装APK包的时候提示“应用程序未安装”的情况。

2、储存模式连接电脑或者用Astro文件管理器找到SD卡目录下的.android_secure文件夹,里面应该会有一个smdl2tmp1.asec,也可能是其他名称,总之与正常程序命名格式明显不一样的文件,删除,再次安装软件,看看是不是好了。

android中获取/设置粘贴板中的内容

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("some thing");
clipboard.getText();

getSystemService是Activity类的一个方法,getSystemService同时还可以获取很多其他系统服务,慢慢研究吧。。。

Android之应用程序自动升级 下载后自动安装的方法

http://blog.sina.com.cn/s/blog_5033827f0100phtz.html

permission is only granted to system apps

我打算为我们网站的安卓客户端加上在线升级功能,不然的话,这个客户端的意义将大打折扣。

根据大拿们的经典,我在AndroidManifest.xml中加上以下三句:

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

结果eclipse马上来个红叉叉,说是 permission is only granted to system apps 。

what is it?

疯狂搜索,一堆英文,一堆提问,一堆不知所谓,好混乱。几次看到有人提示说,将project clean一下,就可以鸟。

果然。方法是点eclipse的菜单project->clean...,然后叉叉就不见了。

啊!多么神奇的clean啊,I like it! 原来,这里的clean,就相当于VS.NET 里的rebuild。

不过,只要稍微修改一下AndroidManifest.xml,立刻会惊动警惕的编译器,它马上又打出一个红叉叉。

怎么办?只好再次 clean 咯。

versionCode与versionName的区别

android
versionCode——整数值,代表应用程序代码的相对版本,也就是版本更新过多少次。

整数值有利于其它程序比较,检查是升级还是降级。你可以把这个值设定为任何想设的值,但是,你必须保证后续更新版的值要比这个大。系统不会强制要求这一行为,但是随着版本更新值也增加是正常的行为。

一般来说,你发布的第一版程序的versionCode设定为1,然后每次发布都会相应增加,不管发布的内容是较大还是较小的。这意味着android:versionCode不像应用程序的发布版本(看下面的android:versionName)那样显示给用户。应用程序和发布的服务不应该显示这个版本值给用户。

android
versionName——字符串值,代表应用程序的版本信息,需要显示给用户。

与android:versionCode一样,系统不会为了任何内部的目的使用这个值,除了显示给用户外。发布的服务也需要提取这个值来显示给用户。


Android文件读写操作

http://blog.csdn.net/ztp800201/article/details/7322110

public void writeLog(String log) {
    log = "[" + now() + "] " + log + "\n";
 
    try {
        FileOutputStream fout = openFileOutput("log.txt", MODE_APPEND);
        byte[] bytes = log.getBytes();
        fout.write(bytes);
        fout.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}