App安裝後不在桌面顯示圖示
阿新 • • 發佈:2019-01-04
歡迎轉載,轉載標明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還在系統裡,如果你解決了這個問題請告訴我,不甚感激。