Android Api Demos登顶之路(四十四)Launcher Shortcuts

通常情况下为一个应用添加快捷方式,只要在launcher中长按这个应用 的图标,系统就会为这个应用在桌面上创建一个快捷方式,名字与图标与launcher中应用的名字与图标相同。利用这种方法创建快捷方式 不需要对activity进行特殊的设置,是由系统自动完成的。
* 在android的早期版本中(我试了Api15的模拟器 该功能已经取消了)还可以通过在系统桌面长按,这时Android会显示用户可以选择添加 的桌面种类列表,选择Shortcut(快捷方式)后,Android会列出所有定义了android.intent.action.CREATE_SHORTCUT的所有应用. 我们就可以选择为列表中的某个activity添加快捷方式。利用这种方法添加快捷方式,需要处理activity,让它支持添加快捷方式。
* 这个demo演示的就是利用这种方式来为activity添加快捷方式。
activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="@string/hello_world" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="intent:" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/intent_info" />


</LinearLayout>

MainActivity

public class MainActivity extends Activity {

    private static final String EXTRA_KEY = "com.fishtosky.launchershortcuts.MainActivity";

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

        // 在加载视图之前就进行判断,如果接收到的intent是创建快捷方式,那么就调用创建快捷方式的方法后,结束掉自己。
        Intent intent = getIntent();
        if (Intent.ACTION_CREATE_SHORTCUT.equals(intent.getAction())) {
            setupShortcut();
            finish();
            return;
        }
        // 如果是正常的打开应用则创建视图,并将意图的信息和意图中传递的数据显示在文本框中。
        // 在本例中如果使用launcher中正常的方式打开则extra为空,如果使用桌面的快捷方式打开则intent会传递字符串
        // 显示在文本上,以区别两种不同方式打开应用。
        setContentView(R.layout.activity_main);
        TextView intentInfo = (TextView) findViewById(R.id.intent_info);
        String info = intent.toString();
        String extra = intent.getStringExtra(EXTRA_KEY);
        if (extra != null) {
            info = info + " " + extra;
        }
        intentInfo.setText(info);
    }

    //设置快捷方式
    private void setupShortcut() {
        //创建一个意图,用于指明当我们点击快捷方式时需要打开的activity,这里打开的是自己
        Intent shortcutIntent=new Intent(Intent.ACTION_MAIN);
        shortcutIntent.setClassName(this, this.getClass().getName());
        shortcutIntent.putExtra(EXTRA_KEY, "这是通过快捷方式打开的应用!");

        //再创建一个意图,指明创建快捷方式的意图,快捷方式的名字和图标
        Intent intent=new Intent();
        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
        Parcelable iconResource=Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher);
        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);

        //设置返回的结果
        setResult(RESULT_OK, intent);
    }

}

配置文件:一是对activity进行配置。activity-alias在需要重复使用同一个activity时使用,直接理解就是activity的一个别名。比如在本例中我们可以在launcher中直接启动activity,也以可通过长按桌面为activity添加一个快捷方式,两种操作都调用了同一个activity,这个时候就需要用到activity-alias。

<activity-alias 
            android:name="ShortCut"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.CREATE_SHORTCUT" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity-alias>

二是要为创建快捷方式添加权限:

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值