1. 程式人生 > >APP實用開發—桌面新增快捷圖示

APP實用開發—桌面新增快捷圖示

原理:

這裡寫圖片描述
從圖上可以看出,Android大致分7步完成快捷方式的建立:

**第1步:**Android系統的launcher程式會呼叫它的pickShortcut()方法去啟動系統的pickActivity程式(應用);

**第2步:**pickActivity程式(應用)啟動後會呼叫它的CheckIntentFilter()方法,去在系統中尋找可以建立快捷方式的應用有哪些,並且列舉出來。只要第三方 App用標籤進行了相應的註冊(具體如何註冊請看下面的程式碼)就可以被發現並列舉出來;

第3步:呼叫Choseitem()方法選擇建立誰的快捷方式;

第4步:完成第三步之後,pickActivity程式(應用)會將選擇的訊息通過Intent返回給系統的launcher;

**第5步:**launcher程式獲得pickActivity返回的訊息後,就會知道建立誰的快捷方式,通過呼叫ProcessShortcut()方法去啟動第三方App中負責建立快捷方式 的Activity,這個Activity就是第二步中我們提到的用標籤進行了註冊的Activity;

第6步:第三方App中負責建立快捷方式的Activity會將快捷方式的名稱,圖示和點選後跳轉路徑通過Intent返回給launcher;

**第7部:**launcher收到返回的訊息後呼叫本身的ComPleteAddShortcut()方法完成快捷方式的建立,並顯示在桌面上;

許可權

 <!-- 新增快捷方式 -->
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

這個方法一般放在引導頁面

private void createShortCut() {
        boolean b = SharedPreferencesTool.getBoolean(this, Constants.SHORTCUT, false);
        if (!b) {
            Intent intent = new
Intent(); intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT"); //通過intent告訴launcher快捷方式的細節 intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "淘寶");//設定快捷方式的名稱 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);//設定快捷方式的圖示 Intent value = new Intent(this,SplashActivity.class); intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, value);//設定快捷方式的操作 sendBroadcast(intent); //如果建立了快捷方式,儲存一個標示,表示快捷方式建立 SharedPreferencesTool.saveBoolean(this, Constants.SHORTCUT, true); } }

或者
用標籤進行註冊

<activity android:name=".CreatShortCut">
    <intent-filter>
        <action android:name="android.intent.action.CREATE_SHORTCUT"/>
    </intent-filter>
</activity>

向Launcher返回相關資料

public class CreatShortCut extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)) {

            Intent _returnIntent = new Intent();
            _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "csx");// 快捷鍵的名字
            _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,// 快捷鍵的ico
                    Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher));
            _returnIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this,
                    MainActivity.class));// 快捷鍵的跳轉Intent

            setResult(RESULT_OK, _returnIntent);// 傳送
            finish();// 關閉本Activity
        }
    }
}

拷貝資料庫的方法

引用外接的資料庫,在引導頁面初始化

private void copyDb(String fileName) {
        File file = new File(getFilesDir(), fileName);
        if (!file.exists()) {
            //1.獲取assets目錄的管理者
            assets = getAssets();
            InputStream in = null;
            FileOutputStream out = null;
            try {
                //2.讀取資源
                in = assets.open(fileName);//開啟assets目錄的資源,fileName:資源的名稱
                //getCacheDir():data/data/應用程式包名/cache
                //getFilesDir():data/data/應用程式包名/files
                out = new FileOutputStream(file);
                //3.讀寫操作,實現拷貝
                byte[] b = new byte[1024];//快取區域
                int len = -1;//儲存讀取長度
                while((len = in.read(b)) != -1){
                    out.write(b, 0, len);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                //關流操作
                if (out != null) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }