flying_vip_521 2012-10-10 09:07 采纳率: 0%
浏览 7280

Android如何实现桌面快捷方式的国际化和自动创建(应用安装时)?

  1. 如果是长按应用程序启动图标拖到桌面的快捷方式,那么只要自己配置了国际化的可以自动转换,求系统长按并拖动到到桌面添加快捷方式的代码,或是源码位置?
  2. 如果是普通代码创建到桌面的快捷方式,虽然配置了国际化,但是代码创建的快捷方式是不随语言的改变而改变的,因此我通过监听local信息,删除原快捷方式,并创建新的快捷方式,但快捷方式在删除和创建的过程均有Toast提示,查看源码,Toast提示貌似无法屏蔽,如有大神能屏蔽,还请多多指点,多谢!
  3. 如有其它解决方案,请指点,我实在是想不出来了。
  4. 如何实现安装应用的时候在桌面创建本应用的快捷方式?
  5. 监听local创建/删除桌面快捷方式的代码如下

    public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.e("MyReceiver", "---------onReceive------改语言------");
    
        delShortcut(context);
        addShortcut(context);
    
    }
    
    private void addShortcut(Context context) {
        Intent mIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
        Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
        MyApp.del = context.getString(R.string.app_name);
    
        // 快捷方式的名称
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));
        shortcut.putExtra("duplicate", true); // 不允许重复创建
    
        // 指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
        // 注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
        ComponentName comp = new ComponentName(context.getPackageName(), "." + "TestLanguageActivity");
    
        Intent mintent= new Intent(Intent.ACTION_MAIN);
        mintent.addCategory(Intent.CATEGORY_LAUNCHER);
        mintent.setComponent(comp);
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,mintent);
    
        // 快捷方式的图标
        ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(context, R.drawable.ic_launcher);
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
    
        context.sendBroadcast(shortcut);
    }
    
    private void delShortcut(Context context) {
    
        Intent shortcut = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
    
        // 快捷方式的名称
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, MyApp.del);
        // shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.app_name));
        // 指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
        // 注意: ComponentName的第二个参数必须是完整的类名(包名+类名),否则无法删除快捷方式
        String appClass = context.getPackageName() + "." + "TestLanguageActivity";
        ComponentName comp = new ComponentName(context.getPackageName(), appClass);
        Intent mintent= new Intent(Intent.ACTION_MAIN);
        mintent.addCategory(Intent.CATEGORY_LAUNCHER);
        mintent.setComponent(comp);
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, mintent);
        context.sendBroadcast(shortcut);
    }
    

    }

  • 写回答

2条回答 默认 最新

  • liangchichexin 2012-10-10 09:22
    关注

    你这是几个问题
    我回答你的第四个问题吧就,希望对你有所帮助。

    一般来说在 Android 中添加快捷方式的有以下两种:

    在launcher的应用程序列表上,长按某一应用程序图标创建快捷方式到桌面
    在桌面上长按在弹出框中选择快捷方式->应用程序->将添加快捷方式的程序
    那么能不能在应用安装时自动将应用的快捷入口添加到桌面呢? 本文给大家分享一下相关的经验?
    桌面是由launcher来控制的,所以我们可以通过下面两种方式来实现快捷方式的自动创建:
    通过向launcher发送Broadcast让launcher创建快捷方式
    为应用程序的组件注册某一个符合特定条件的IntentFilter,然后可以直接在Launcher的桌面添加启动该组件的快捷方式。
    第一种方式:

    /**
      * 添加快捷方式到桌面 要点:  
      * 1.给Intent指定action="com.android.launcher.INSTALL_SHORTCUT"
      * 2.给定义为Intent.EXTRA_SHORTCUT_INENT的Intent设置与安装时一致的action(必须要有)  
      * 3.添加权限:com.android.launcher.permission.INSTALL_SHORTCUT
      */
     private void addShortcutToDesktop() {
         Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
         // 不允许重建
         shortcut.putExtra("duplicate", false);
         // 设置名字
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,this.getString(R.string.app_name));
         // 设置图标
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(this,
                         R.drawable.ic_launcher));
         // 设置意图和快捷方式关联程序
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,new Intent(this, this.getClass()).setAction(Intent.ACTION_MAIN));
         // 发送广播
         sendBroadcast(shortcut);
     }
    

    当快捷方式创建成功后,launcher将通过toast的方式提示快捷方式创建成功,其中通过
    shortCutIntent.putExtra("duplicate", false);设置不能重复创建,如果快捷方式已经创建则提示快捷方式已经创建
    注意如果要让上述代码能成功运行,我们还需要设置Uses permission

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    

    第二种方式和第一种有些类似,不过我们不用广播的方式让给launcher创建,而是通过注册IntentFilter,由于“添加快捷方式”Action是 由Launcher通过startActivity-ForResult这一方法发出的,在Activity启动后把初始化的快捷方式 Intent返回给Launcher应用程序,设置结果值为RESULT_OK表示正常返回。
    主要代码如下:
    首先在xml中设置IntentFilter

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

    复制代码创建核心代码:

    if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
    
    Intent shortcut = new Intent(Intent.ACTION_CREATE_SHORTCUT);
         // 不允许重建
         shortcut.putExtra("duplicate", false);
         // 设置名字
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
                 this.getString(R.string.app_name));
         // 设置图标
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                 Intent.ShortcutIconResource.fromContext(this,
                         R.drawable.ic_launcher));
         // 设置意图和快捷方式关联的程序
         shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
                 new Intent(this, this.getClass()));     
            //将结果返回到launcher
            setResult(RESULT_OK, intent);       
        }
    

    在launcher中我们运行程序就可以将快捷方式创建在桌面上。

    通过上述方式可以自动将快捷方式创建到桌面上,但是每次运行程序时都会将快捷方式创建到桌面上,下面我们将通过程序判断快捷方式是否已经创建到桌面上了,基本思路是:由于快捷方式launcher管理的,我们可以通过查看launcher中是否已经有此快捷方式数据,如果有就不在创建。
    主要代码如下:

    /**
      * 添加权限:<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
      *  
      * @return
      */
     private boolean hasInstallShortcut() {
         boolean hasInstall = false;
         final String AUTHORITY = "com.android.launcher.settings";
         Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
                 + "/favorites?notify=true");
         Cursor cursor = this.getContentResolver().query(CONTENT_URI,
                 new String[] { "title", "iconResource" }, "title=?",
                 new String[] { this.getString(R.string.app_name) }, null);
         if (cursor != null && cursor.getCount() > 0) {
             hasInstall = true;
         }
         return hasInstall;
     }
    

    上述查询操作,需要具有以下权限:

    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"></uses-permission>
    

    注意通过程序创建的快捷方式不会随着程序卸载而自动删除。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀