当前位置:  编程技术>移动开发
本页文章导读:
    ▪应用Alarm        使用Alarm Alarm是在预定的时间触发Intent的,独立于应用程序的提醒用户的方式。当这个Alarm触发后,就会广播这个Intent,如果应用程序没有起启,就会启动这个应用程序,而不需要就用程序.........
    ▪ 怎么在Ubuntu下安装GIT        如何在Ubuntu上安装GIT 如何在Ubuntu上安装GIT <!--oogle_ad_section_star--> 今天花了很长时间才在Ubuntu 上安装好GIT 1.6.0.2,最开始本不需要1.6,所以只用 1 sudo apt-get install git-core 就把GIT1.5安.........
    ▪ NDK入门、拔高和实战       NDK入门、提高和实战     网上也有一些对NDK的介绍,不过都是很简单的把sample里面的例子讲解一下,并不深入,我这里把我的所得分享一下。我下载的是Android Native Developer Kit (NDK) R4版本,.........

[1]应用Alarm
    来源: 互联网  发布时间: 2014-02-18
使用Alarm
Alarm是在预定的时间触发Intent的,独立于应用程序的提醒用户的方式。当这个Alarm触发后,就会广播这个Intent,如果应用程序没有起启,就会启动这个应用程序,而不需要就用程序被打开或者处于活动状态。
通过AlarmManager来管理所有的Alarm。
Intent intent = new Intent(this, OneShotAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);

// 设置警报时间		
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);

// 设置警报时间,除了用Calendar之外,还可以用
long firstTime = SystemClock.elapsedRealtime();
			
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
// 只会警报一次
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
// 会重复警报多次
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, sender);

// 要取消这个警报,只要通过PendingIntent就可以做到
am.cancel(sender);


注意:Alarm是通过广播intent,所以BroadcastReceiver,Activity,Service都可以得到其intent,并进行处理。

    
[2] 怎么在Ubuntu下安装GIT
    来源: 互联网  发布时间: 2014-02-18
如何在Ubuntu上安装GIT
如何在Ubuntu上安装GIT
<!--oogle_ad_section_star-->

今天花了很长时间才在Ubuntu 上安装好GIT 1.6.0.2,最开始本不需要1.6,所以只用

1
sudo apt-get install git-core

就把GIT1.5安装好。可以使用GIT://,SSH等方式。但后来需要HTTP的支持,1.5版本中不包含这个,所以开始漫长的升级之路。由于还没有哪个repository中有最新的1.6的package,所以只好用源文件来装了。
1在这里下载了一个git-1.6.0.2.tar.gz
2 解压这个文件到git-1.6.0.2目录中(//home/cce/git-1.6.0.2)
3 然后

1
2
3
4
5
6
sudo dpkg --purge git-core
cd git-1.6.0.2
./configure --prefix=/usr/local
make
sudo make install
git --version

如果你幸运的话,这时你最装好了。如果其过程中有很异常的话,有可能你需要先安装一些package,例如

1
sudo apt-get install build-essential gettext

不过,只要看提示,apt-get就可以了。如果此时你还幸运的话,那follow上面的1到6步,你就可以装好了。如果你很不幸,那只好从源代码装了(我就走到了这一步,NND)

1
2
3
4
5
6
7
# expat (expat 是一个C的xml解析库)
wget http://superb-west.dl.sourceforge.net/sourceforge/expat/expat-2.0.1.tar.gz
tar zxfv expat-2.0.1.tar.gz
cd expat-2.0.1
./configure
make
sudo make install

这样就OK了。如果在make或make install还是没有成功的话,你可能要做这一步(GIT 用它来compile git-http-push)完成expat的安装。

1
2
3
4
5
6
7
# expat (expat 是一个C的xml解析库)
wget http://superb-west.dl.sourceforge.net/sourceforge/expat/expat-2.0.1.tar.gz
tar zxfv expat-2.0.1.tar.gz
cd expat-2.0.1
./configure
make
sudo make install

如果你只是不想使用git-http-push,那么不安装expat,只在make 之前执行下面命令就可以了(不过可能谁会安装1.6而不用http-push,呵呵)

1
export NO_EXPAT=yes

    
[3] NDK入门、拔高和实战
    来源: 互联网  发布时间: 2014-02-18
NDK入门、提高和实战

    网上也有一些对NDK的介绍,不过都是很简单的把sample里面的例子讲解一下,并不深入,我这里把我的所得分享一下。我下载的是Android Native Developer Kit (NDK) R4版本,当前的最新版。
    下载地址如下:
    http://dl.google.com/android/ndk/android-ndk-r4b-linux-x86.zip

 

    我下面讲的都是以linux环境为准,因为我的系统是linux的。windows下可以弄个Cygwin,模拟linux环境,网上有很多介绍。
    首先进入ndk目录,有个README文件,里面提到了API的文档在docs/STABLE-APIS.TXT里面,如何安装NDK,参考docs/INSTALL.TXT,还有如何使用NDK,参考docs/HOWTO.TXT。建议这些文档都看一遍,有个大概了解。

 

    安装:
    INSTALL.TXT里面讲的是如何安装,安装NDK,就需要一个可以make环境,linux自带了,所以不用关心。还有一点,以前的版本都需要运行build/host-setup.sh来进行初始化,这个版本把它删除了,这样更方便。
    然后就是配置环境变量。
    在~/.bashrc文件里面,添加   

NDK_ROOT=~/android-ndk-r4b #后面的路径是NDK所在的目录,根据自己的目录修改
export NDK_ROOT
 

    然后保存,重新打开bash。

 

    使用:
    先拿sample试刀吧,刚开始什么都不知道,只有运行出一个例子,才能增加信心。
    编译的两种方法:
    1.进入要目标工程目录,比如$NDK_ROOT/samples/hello-jni,然后执行$NDK_ROOT/ndk-build
    2.在任何地方,执行$NDK_ROOT/ndk-build -C $NDK_ROOT/samples/hello-jni.
    如果成功的话,会生成obj和libs两个目录。
    选择一种方法,编译这个例子。然后打开eclipse,把hello-jni这个工程导入,运行,ok,就能看到效果了。

 

    进阶:
    docs下的STABLE-APIS.TXT里面讲了系统API的用法。我以1.5为例。进入$NDK_ROOT/build/platforms/android-3/arch-arm/usr/include,里面有很多.h文件,这些都是可以在NDK里面调用的,除了linux和asm目录下的。
    一般来说,主要用到的是jni.h,里面提供了很多对类和对象的操作。
    另外,1.5提供了log的API,在android/log.h里面,使用的时候,在c文件中#include <android/log.h>,然后在Android.mk里面加上LOCAL_LDLIBS := -llog,就可以了。
    1.6到2.01提供了openGL ES 1.x的API,2.1提供了openGL ES 2.0的API,2.2提供了graphics的处理接口。使用方法同log。

 

    实例:
    给出两个点的坐标,求它们的距离。
    首先,创建一个Point对象,
   

public class Point {
	float x;
	float y;
}
 

    然后在c文件中定义一个函数   

jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b){}

 

    返回值是float,在jni中定义的是jfloat。

    函数名规则: Java开头,接着是包名的每一段,然后是类名,最后是Java中调用的方法名,中间都用下划线隔开。第一个参数JNIEnv* env和第二个参数jobject thiz都是必须的,后面的才是Java中传递进来的参数。这里是两个Point对象。


    首先确定要做的步骤:
    1.找到这个Point类
    2.找到类中的域x和y的域id
    3.根据ID取出x和y的值
    4.计算结果并返回
    那么代码如下:

#include <jni.h>
#include <math.h>
#include <android/log.h>

jfloat Java_chroya_demo_ndk_Main_distance(JNIEnv* env, jobject thiz, jobject a,jobject b)
{
        //步骤1
	jclass point_class = (*env)->FindClass(env, "chroya/demo/ndk/Point");
	if(point_class == NULL) {
		//printf("class not found");
		__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "class Point not found");
		return 0;
	} else {
		__android_log_write(ANDROID_LOG_INFO, "MyNdkDemo", "found class Point");
	}
        //步骤2
	jfieldID field_x = (*env)->GetFieldID(env, point_class, "x", "F");
	jfieldID field_y = (*env)->GetFieldID(env, point_class, "y", "F");
        //步骤3
	jfloat ax = (*env)->GetFloatField(env, a, field_x);
	jfloat ay = (*env)->GetFloatField(env, a, field_y);
	jfloat bx = (*env)->GetFloatField(env, b, field_x);
	jfloat by = (*env)->GetFloatField(env, b, field_y);
        //步骤4
	return sqrtf(powf(bx-ax, 2) + powf(by-ay, 2));
}

     然后在Java里面调用:

public class Main extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(getApplicationContext());
        Point a = new Point();
        a.x = 3;
        a.y = 3;
        
        Point b = new Point();
        b.x = 5;
        b.y = 5;
        
        float d = distance(a,b);
        tv.setText("distance(a,b):"+d);
        setContentView(tv);
    }
    
    public native float distance(Point a, Point b);
    
    static {
    	System.loadLibrary("demo");
    }
}

      运行,得到结果distance(a,b):2.828427

      源码参见附件 。

1 楼 jaymsimusic 2010-08-05  
昨天我装Cygwin 都装了好久,不过最后还是ok了
这个例子讲解的很详细啊
2 楼 crazy24k 2010-08-05  
这个例子很不错。
    
3 楼 wolfplanet 2010-08-10  
还是我写的简单
http://abitno.me/a-simple-tutorial-to-android-ndk
4 楼 pollyduan 2010-08-18  
LZ不错,再看andriod java版
5 楼 lpw14 2011-02-25  
最近正在学习NDK,例子很好,容易上手。
6 楼 蓝月儿 2011-05-18  
想学一下 环境是windows的 装了个cygin 不知道怎么用 呢
7 楼 liuchangdong007 2011-05-20  
我是用Cygwin来做的,我是在windows环境下进行开发。
推荐一下 《【eoe特刊】第七期:NDK》
8 楼 snowdream 2011-05-22  
跳跃性有点大,讲解不够详细,不过还是非常感谢。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
移动开发 iis7站长之家
▪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