[mobilesafe] 06_创建一个桌面快捷图标

Android 4.0

创建一个桌面快捷图标

 
1、桌面程序要存活,否则快捷图标也不可能存在
2、给桌面发送一个消息,让桌面程序添加一个快捷的入口
3、可以通过给桌面发送一个广播事件,桌面接收到该事件执行创建shortcut
4、系统源码:\packages\apps\Launcher2\AndroidManifest.xml
<!-- Intent received used to install shortcuts from other applications -->
<receiver
    android:name="com.android.launcher2.InstallShortcutReceiver"
    android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
    <intent-filter>
        <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
    </intent-filter>
</receiver>
5、需要权限,否则可以随意在桌面上创建图标
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />  
6、桌面程序,默认有拨打电话的权限,可以不用声明权限
核心代码:
package cn.zengfansheng.shortcut;
 
import android.app.Activity;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    /**
     * 创建一个一键拨打电话的图标
     * @param view
     */

    public void click(View view) {
 
        /*<!-- Intent received used to install shortcuts from other applications -->
            <receiver
                android:name="com.android.launcher2.InstallShortcutReceiver"
                android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
                <intent-filter>
                    <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
                </intent-filter>
            </receiver>*/

        Intent intent = new Intent();
 
        // 一、设置action
        intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        //public static final String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT";
 
        // 1、设置快捷方式的名字
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "拨打110");
 
        // 2、设置快捷方式的intent
        Intent value = new Intent();
        // intent.setAction(Intent.ACTION_CALL);//不要写intent,是value
        // intent.setData(Uri.parse("tel:110"));//不要写intent,是value
        value.setAction(Intent.ACTION_CALL);
        value.setData(Uri.parse("tel:110"));
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,value);
 
        // 3、设置快捷方式的图标
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON,
                BitmapFactory.decodeResource(getResources(), R.drawable.app));
        // The name of the extra used to define the icon, as a Bitmap, of a shortcut.
 
        // 二、发送广播
        sendBroadcast(intent);
    }
}
注意:
Intent value = new Intent();
        // intent.setAction(Intent.ACTION_CALL);//不要写intent,是value
        // intent.setData(Uri.parse("tel:110"));//不要写intent,是value
        value.setAction(Intent.ACTION_CALL);
        value.setData(Uri.parse("tel:110"));
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT,value);