APP實用開發—桌面新增快捷圖示
阿新 • • 發佈:2019-02-08
原理:
從圖上可以看出,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();
}
}
}
}
}