Android_Accessibility

Accessibility服務(wù)可以為所有的應(yīng)用程谦趣,一組應(yīng)用程序或單個應(yīng)用程序提供這些增強(qiáng)功能。

  1. 新建一個類繼承 AccessibilityService

    public class InstallAccessibilityService extends AccessibilityService
    
  2. AndroidManifest文件里注冊

    <service    
    android:name=".InstallAccessibilityService"    
    android:label="智能安裝"    
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">    
    <intent-filter>        
    <action android:name="android.accessibilityservice.AccessibilityService" />    
    </intent-filter>    
    <meta-data               
    android:name="android.accessibilityservice"               
    android:resource="@xml/accessibility_service_config" />
    </service>
    
  3. accessibility_service_config.xml
    AndroidManifest里添加<meta-data>標(biāo)簽一罩,在標(biāo)簽里指出配置文件的位置

    <accessibility-service 
     xmlns:android="http://schemas.android.com/apk/res/android"    
     android:packageNames="com.android.packageinstaller"    
     android:description="@string/accessibility_service_description"    
     android:accessibilityEventTypes="typeAllMask"    
     android:accessibilityFlags="flagDefault"    
     android:accessibilityFeedbackType="feedbackGeneric"    
     android:canRetrieveWindowContent="true"    />
    
  4. AccessibilityService 方法重載

onServiceConnected() - 可選廊驼。系統(tǒng)會在成功連接上你的服務(wù)的時候調(diào)用這個方法扰付,在這個方法里你可以做一下初始化工作此叠,例如設(shè)備的聲音震動管理纯续,也可以調(diào)用setServiceInfo()進(jìn)行配置工作。

onAccessibilityEvent() - 必須灭袁。通過這個函數(shù)可以接收系統(tǒng)發(fā)送來的AccessibilityEvent猬错,接收來的AccessibilityEvent是經(jīng)過過濾的,過濾是在配置工作時設(shè)置的茸歧。

onInterrupt() - 必須倦炒。這個在系統(tǒng)想要中斷AccessibilityService返給的響應(yīng)時會調(diào)用。在整個生命周期里會被調(diào)用多次软瞎。

onUnbind() - 可選逢唤。在系統(tǒng)將要關(guān)閉這個AccessibilityService會被調(diào)用。在這個方法中進(jìn)行一些釋放資源的工作

  1. 一般在onServiceConnected()方法里進(jìn)行

    private void setServiceInfo(int feedbackType) {  
    AccessibilityServiceInfo info = new AccessibilityServiceInfo();      
    info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK; 
     info.feedbackType = feedbackType;  
     info.notificationTimeout = EVENT_NOTIFICATION_TIMEOUT_MILLIS;  
     info.packageNames = PACKAGE_NAMES;  
     setServiceInfo(info);  
     }
    
  2. 智能安裝apk

    private void installApk(String path) {    
    if (!path.endsWith(".apk")) {        
    Toast.makeText(this, "文件不可安裝", Toast.LENGTH_SHORT).show();   
    } else {        
    if (!isRoot()) {            
    Toast.makeText(this, "沒有ROOT權(quán)限涤浇,將進(jìn)行智能安裝", Toast.LENGTH_SHORT).show();                     
    smartInstall(path);        
    } else {            
    silentInstall(path);        }    }}
    private void silentInstall(final String path) {    
    new Thread(new Runnable() {        
    @Override        
    public void run() {            
    SilentInstall installHelper = new SilentInstall();            
    final boolean result = installHelper.install(path);            
     runOnUiThread(new Runnable() {                
    @Override                
    public void run() {                    
    if (result) {                        
    installBtn.setText("安裝成功");                    
    } else {                        
    installBtn.setText("安裝失敗");                    
    }                    
     installBtn.setText("秒裝");                
    }            
    });        
    }    
    }).start();
     }
    private void smartInstall(String path) {    
    Uri uri = Uri.fromFile(new File(path));    
    Intent localIntent = new Intent(Intent.ACTION_VIEW);    
    localIntent.setDataAndType(uri, "application/vnd.android.package-archive");   
    try {        startActivity(localIntent);    } catch (Exception e) {        e.printStackTrace();    }}
    
    
    public class SilentInstall {    
    public boolean install(String path) {        
    boolean result = false;        
    DataOutputStream dataOutputStream = null;        
    BufferedReader bufferedReader = null;       
    try {            
    Process process = Runtime.getRuntime().exec("su");            
    dataOutputStream = new DataOutputStream(process.getOutputStream());            
    String commmad = "pm instll -r " + path + "\n";            
    dataOutputStream.write(commmad.getBytes(Charset.forName("utf-8")));            
    dataOutputStream.flush();            
    dataOutputStream.writeBytes("exit\n");            
    dataOutputStream.flush();            
    process.waitFor();            
    bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));            
    String msg = ""; 
        String line = "";
         while ((line = bufferedReader.readLine()) != null) {
             msg += line;
         }
         if (!msg.contains("Failure")) {
             result = true;
         }
      } catch (Exception e) {
         e.printStackTrace();
     } finally {
         try {
             if (dataOutputStream != null) {
                 dataOutputStream.close();
             } 
            if (bufferedReader != null) { 
                bufferedReader.close();
             } 
        } catch (IOException e) { 
           e.printStackTrace(); 
        } 
    } 
    return result;
    

    }}
    7 開啟輔助功能

    Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
    startActivity(intent);
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳖藕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子只锭,更是在濱河造成了極大的恐慌著恩,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜻展,死亡現(xiàn)場離奇詭異喉誊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)纵顾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門伍茄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人施逾,你說我怎么就攤上這事敷矫。” “怎么了汉额?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵沪饺,是天一觀的道長。 經(jīng)常有香客問我闷愤,道長整葡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任讥脐,我火速辦了婚禮遭居,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旬渠。我一直安慰自己俱萍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布告丢。 她就那樣靜靜地躺著枪蘑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岳颇,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天照捡,我揣著相機(jī)與錄音,去河邊找鬼话侧。 笑死栗精,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瞻鹏。 我是一名探鬼主播悲立,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼新博!你這毒婦竟也來了薪夕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赫悄,失蹤者是張志新(化名)和其女友劉穎寥殖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩蜘,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年同诫,在試婚紗的時候發(fā)現(xiàn)自己被綠了粤策。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误窖。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖霹俺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丙唧,我是刑警寧澤愈魏,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布想际,位于F島的核電站培漏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胡本。R本人自食惡果不足惜牌柄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望侧甫。 院中可真熱鬧珊佣,春花似錦蹋宦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虫碉,卻和暖如春贾惦,著一層夾襖步出監(jiān)牢的瞬間胸梆,已是汗流浹背敦捧。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碰镜,地道東北人兢卵。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像绪颖,于是被迫代替她去往敵國和親秽荤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 2017年5月17日 Kylin_Wu 標(biāo)注(★☆)為考綱明確給出考點(diǎn)(必考) 常見手機(jī)系統(tǒng)(★☆) And...
    Azur_wxj閱讀 1,815評論 0 10
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程柠横,因...
    小菜c閱讀 6,426評論 0 17
  • 1.什么是Activity?問的不太多牍氛,說點(diǎn)有深度的 四大組件之一,一般的,一個用戶交互界面對應(yīng)一個activit...
    JoonyLee閱讀 5,736評論 2 51
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理晨继,服務(wù)發(fā)現(xiàn),斷路器搬俊,智...
    卡卡羅2017閱讀 134,669評論 18 139
  • 本人初學(xué)Android紊扬,最近做了一個實(shí)現(xiàn)安卓簡單音樂播放功能的播放器,收獲不少唉擂,于是便記錄下來自己的思路與知識總結(jié)...
    落日柳風(fēng)閱讀 19,140評論 2 41