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

来源:互联网 发布:淘宝王子 删除中差评 编辑:程序博客网 时间:2024/05/22 13:36

通常情况下为一个应用添加快捷方式,只要在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"/>
0 0
原创粉丝点击