1. 程式人生 > >App安裝後不在桌面顯示圖示

App安裝後不在桌面顯示圖示

歡迎轉載,轉載標明http://blog.csdn.net/ning_gg/article/details/51271962
有那麼一些app,在使用的過程中需要安裝另一個app,安裝完之後再次點選就跳到了另一個app,但是在桌面上看不到該app的圖示。換句話說另一個app完成成了主app的一個功能,雖然我不喜歡這麼做,但是有些app已經這麼做了,所以我們還是要搞懂他們怎麼實現的。

我寫了兩個demo 一個A,一個B,A是主程式,我把B的apk檔案放入到A的assets資料夾下,當然實際應用的時候B的apk檔案可以放到網上,A去下載,那樣減少A的體積。A裡有一個按鈕,點選按鈕,如果B已經安裝上了直接跳到B,如果B沒安裝就先安裝B,再次點選就跳到B。好了,原理說清了,那開始實現吧。

手機在A的onCreate中把assets裡面的B拷貝到SDCard下,A不能直接裝assets裡面的apk,不然會出現檔案解析錯誤。先拷貝,下面附上拷貝的方法。

/**
     * 將assets下的apk複製到sdcard上  安裝程式不能直接安裝assets下的apk
     * @param context
     * @param fileName assets下的檔名
     * @param path  需要拷貝的路徑
     * @return
     */
         public boolean copyApkFromAssets(Context context, String fileName, String path) {  
             boolean
copyIsFinish = false; try { InputStream is = context.getAssets().open(fileName); File file = new File(path); file.createNewFile(); FileOutputStream fos = new FileOutputStream(file); byte[] temp = new
byte[1024]; int i = 0; while ((i = is.read(temp)) > 0) { fos.write(temp, 0, i); } fos.close(); is.close(); copyIsFinish = true; } catch (IOException e) { e.printStackTrace(); } return copyIsFinish; }

然後繫結A裡面的button onclick方法實現,同樣附上程式碼

@Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.jia:
        //com.example.jia B的包名
        //com.example.jia.MainActivity B的MainActivity
            ComponentName cn = new ComponentName(
            "com.example.jia","com.example.jia.MainActivity");
            intent.setComponent(cn);
            intent.setAction("android.intent.action.MAIN");
            try {
                startActivityForResult(intent, RESULT_OK);
            } catch (Exception e) {
                Intent intent1 = new Intent(Intent.ACTION_VIEW);  
                intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
                intent1.setDataAndType(Uri.parse("file://" + Environment.getExternalStorageDirectory().getAbsolutePath()+"/jia.apk"),  
                               "application/vnd.android.package-archive");  
                startActivity(intent1);  
            }
            break;
            default:
            break;
        }
    }

安裝跳轉ok了,然後還有最後一步我們不需要在桌面上顯示B的icon,所以在B的mainfest檔案中把這行註釋掉

<category android:name="android.intent.category.LAUNCHER" />

好了,功能都在這裡了,其實我不是很喜歡寫文字,我覺得程式碼加上註釋就完全能看懂了。還有程式碼是用eclipse寫的,下回還是堅決用studio吧,那個程式碼複製上來更好看點。
差點忘了這個demo還有個問題我沒有搞定,就是當用戶解除安裝A的時候,按照日常習慣B也要跟著A解除安裝的,但是我的只是解除安裝了A,B還在系統裡,如果你解決了這個問題請告訴我,不甚感激。