xiaoguozi's Blog
Pay it forword - 我并不觉的自豪,我所尝试的事情都失败了······习惯原本生活的人不容易改变,就算现状很糟,他们也很难改变,在过程中,他们还是放弃了······他们一放弃,大家就都是输家······让爱传出去,很困难,也无法预料,人们需要更细心的观察别人,要随时注意才能保护别人,因为他们未必知道自己要什么·····
     摘要: 广播接收器:   广播接收者(BroadcastReceiver)用于监听系统事件或应用程序事件,通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()可以向系统发送广播意图,通过广播一个意图(Intent)可以被多个广播接收者所接收,从而可以在不用修改原始的应用程序的情况下,让你对事件作出反应。   &n...  阅读全文
posted @ 2012-06-07 23:09 小果子 阅读(2786) | 评论 (0)编辑 收藏

网上找到的,HTC One X,三星i9000 cm9 4.0.4测试通过,在此记录一下,大伙需要的话就拿去吧..


1. Android 2.3(不包括)以下,通过获取aidl远程服务接口TelephoneyManager来调用它的answerRingingCall方法(ps: 关于此方法具体做法,由于时间关系,我这里就不详细说啦,大家Google一下吧)

        TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        Class c 
= Class.forName(tm.getClass().getName());
        Method m 
= c.getDeclaredMethod("getITelephony");
        m.setAccessible(
true);
        ITelephony telephonyService;
        telephonyService 
= (ITelephony) m.invoke(tm);

        
// Silence the ringer and answer the call!
        telephonyService.silenceRinger();
        telephonyService.answerRingingCall();



2. Android 2.3(包括)以上,如果照样使用TelephoneyManager获取到的answerRingingCall方法的话,就会抛没有 android.permission.MODIFY_PHONE_STATE权限异常,其实你已经配了这个权限的了,但是不好意思,你的App不是系统 软件,没有系统签名,所以还是不能调用,除非,你root了你的手机,把你的app装到系统软件里面去,所以这里使用另外一种方法实现自动接听这个行为 了,详细如下:

刚开始我用这段代码的,发现三星机型可以,但HTC(如: G10 , One X)不行,

 Intent intent = new Intent("android.intent.action.MEDIA_BUTTON");
 KeyEvent keyEvent 
= new KeyEvent(KeyEvent.ACTION_DOWN,  KeyEvent.KEYCODE_HEADSETHOOK);
 intent.putExtra(
"android.intent.extra.KEY_EVENT",keyEvent);
 sendOrderedBroadcast(intent,
"android.permission.CALL_PRIVILEGED");
 intent 
= new  Intent("android.intent.action.MEDIA_BUTTON");
 keyEvent 
= new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK);
 intent.putExtra(
"android.intent.extra.KEY_EVENT",keyEvent);
 sendOrderedBroadcast(intent,
"android.permission.CALL_PRIVILEGED");



后来又google到了这段代码,经过测试,完全好使..


Intent localIntent1 = new Intent(Intent.ACTION_HEADSET_PLUG);
localIntent1.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
localIntent1.putExtra(
"state"1);
localIntent1.putExtra(
"microphone"1);
localIntent1.putExtra(
"name""Headset");
CallingActivity.
this.sendOrderedBroadcast(localIntent1,"android.permission.CALL_PRIVILEGED");

Intent localIntent2 
= new Intent(Intent.ACTION_MEDIA_BUTTON);
KeyEvent localKeyEvent1 
= new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK);
localIntent2.putExtra(
"android.intent.extra.KEY_EVENT",localKeyEvent1);
CallingActivity.
this.sendOrderedBroadcast(localIntent2,"android.permission.CALL_PRIVILEGED");

Intent localIntent3 
= new Intent(Intent.ACTION_MEDIA_BUTTON);
KeyEvent localKeyEvent2 
= new KeyEvent(KeyEvent.ACTION_UP,KeyEvent.KEYCODE_HEADSETHOOK);
localIntent3.putExtra(
"android.intent.extra.KEY_EVENT",localKeyEvent2);
CallingActivity.
this.sendOrderedBroadcast(localIntent3,"android.permission.CALL_PRIVILEGED");

Intent localIntent4 
= new Intent(Intent.ACTION_HEADSET_PLUG);
localIntent4.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
localIntent4.putExtra(
"state"0);
localIntent4.putExtra(
"microphone"1);
localIntent4.putExtra(
"name""Headset");
CallingActivity.
this.sendOrderedBroadcast(localIntent4,"android.permission.CALL_PRIVILEGED");
posted @ 2012-06-07 17:20 小果子 阅读(1981) | 评论 (2)编辑 收藏
由于Android安装包APK文件仅仅是一个简单的zip包,导致了APK文件很容易被反编译。这不仅威胁到软件开发公司及程序开发人员的知识产权,而且成为了恶意程序滋生的温床。

    那么如何增加APK被破解的难度,保障APK程序的安全性呢?这段时间里,我总结了一些技术上可行的方法。它们包括如下几篇文章。

 《APK反破解之一:Android Java混淆(ProGuard)》 
 《APK反破解之二:Android APK 签名比对》 
 《APK反破解之三:NDK编译.so动态库》 
 《APK反破解之四:Android代码动态加载技术》 

    为了方便大家查找,特意在这里做个小结,将连接整理在此,方便大家阅读。之所以将这几篇文章的整理称为“小结”,是因为这远远算不上“总结”。希望大家多多交流,随时留言发表自己的想法,多多补充、指正。谢谢了!

    Android代表了移动互联网时代的兴起,它将广泛运行在各种移动终端之上。有机构数据预测,移动互联网时代的终端数量将是PC时代终端设备数 量的10倍以上。并且移动终端本身的特点决定了它比PC更为私有化。因此它的安全性、隐私保护性将比PC时代的安全和隐私保护更为受到用户、媒体和机构的 关注。

    Android这个可爱的小绿人从出生到现在,满打满算也只有三周岁而已。它的安全领域存在着太多的空白等着我们去开拓和填补。这既是挑战,也是 机遇。希望大家能借看雪论坛Android软件安全板块这个平台,多多交流,相互学习,共同迎接移动互联网软件安全的春天!
posted @ 2012-05-24 17:12 小果子 阅读(585) | 评论 (0)编辑 收藏
做Android应用,不可避免的会与SQLite打交道。随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了。

  SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。

  并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段:    

1 ALTER TABLE Subscription ADD COLUMN Activation BLOB;
2 ALTER TABLE Subscription ADD COLUMN Key BLOB;

  另外,如果遇到复杂的修改操作,比如在修改的同时,需要进行数据的转移,那么可以采取在一个事务中执行如下语句来实现修改表的需求。

  1. 将表名改为临时表

ALTER TABLE Subscription RENAME TO __temp__Subscription;

  2. 创建新表

CREATE TABLE Subscription (OrderId VARCHAR(32) PRIMARY KEY ,UserName VARCHAR(32) NOT NULL ,ProductId VARCHAR(16) NOT NULL);

  3. 导入数据  

INSERT INTO Subscription SELECT OrderId, “”, ProductId FROM __temp__Subscription;

  或者  

INSERT INTO Subscription() SELECT OrderId, “”, ProductId FROM __temp__Subscription;

  * 注意 双引号”” 是用来补充原来不存在的数据的
  4. 删除临时表  

DROP TABLE __temp__Subscription;

  通过以上四个步骤,就可以完成旧数据库结构向新数据库结构的迁移,并且其中还可以保证数据不会应为升级而流失。

  当然,如果遇到减少字段的情况,也可以通过创建临时表的方式来实现。

posted @ 2012-05-09 10:55 小果子 阅读(772) | 评论 (0)编辑 收藏
http://www.oschina.net/question/231733_44154
posted @ 2012-05-08 17:06 小果子 阅读(72) | 评论 (0)编辑 收藏
仅列出标题
共58页: First 12 13 14 15 16 17 18 19 20 Last