我想以编程方式获取主屏幕启动器中所有已安装快捷方式的列表.我在网上找到了很多片段,但没有一个提供正确的输出
对于此片段:
Intent shortcutsIntent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
ArrayList<Intent> intentList = new ArrayList<Intent>();
Intent intent=null;
String launchers="";
final PackageManager packageManager=getPackageManager();
for(final ResolveInfo resolveInfo:packageManager.queryIntentActivities(shortcutsIntent, 0)) {
launchers=launchers+"\n"+resolveInfo.activityInfo.packageName;
intent=packageManager
.getLaunchIntentForPackage(resolveInfo.activityInfo.packageName);
intentList.add(intent);
}
Run Code Online (Sandbox Code Playgroud)
这只提供联系人,浏览器等预设快捷方式.不完全是在主屏幕上找到的.
而这个片段:
PackageManager pm = getPackageManager();
Intent i = new Intent("android.intent.action.MAIN");
i.addCategory("android.intent.category.HOME");
List<ResolveInfo> lst = pm.queryIntentActivities(i, 0);
if (lst != null) {
for (ResolveInfo resolveInfo : lst) {
}
}
}
Run Code Online (Sandbox Code Playgroud)
仅提供com.android.launcher的默认启动器.
我尝试实现一种功能,允许用户选择默认的Android默认启动器应用程序.此外,我需要接收选择了哪个应用程序的信息.但这种方法存在问题.
要让用户选择Launcher Application,我们可以简单地启动给定的intent:
val selector = Intent(Intent.ACTION_MAIN)
selector.addCategory(Intent.CATEGORY_HOME)
selector.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(selector)
Run Code Online (Sandbox Code Playgroud)
它导致这样的对话:
我观察到的,如果我使用startActivity
,Launcher应用程序设置很好并按预期工作,但如果我使用startActivityForResult
,那么我将得到一些回调,但Launcher应用程序根本不会设置.此外,收到的意图并没有什么有趣的onActivityResult
.
然后,我尝试使用IntentSender.
代码如下:
val selector = Intent(Intent.ACTION_MAIN)
selector.addCategory(Intent.CATEGORY_HOME)
selector.flags = Intent.FLAG_ACTIVITY_NEW_TASK
val receiver = Intent(this, MyBroadcastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT)
val chooser = Intent.createChooser(selector, "Select a Home app", pendingIntent.intentSender);
startActivity(chooser)
Run Code Online (Sandbox Code Playgroud)
接收器如下:
class MyBroadcastReceiver: BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val componentName = intent.extras.getParcelable<ComponentName>(Intent.EXTRA_CHOSEN_COMPONENT)
//com.example.myapp if my app was choosen
val pkg = componentName.packageName …
Run Code Online (Sandbox Code Playgroud) 我正在修改AOSP源代码,因为我的应用程序需要在自助服务终端环境中运行.
我希望Android直接启动到应用程序.我已经从中排除了launcher2generic_no_telephony.mk
,并在那里添加了应用程序.现在Android提示我一直选择默认启动器.
弹出窗口中提供的两个选项:
如何排除Android Home Sample Launcher?或者是否有另一种方法在AOSP构建中设置默认启动器?
我正在. In that case I want to put
我的主屏幕上创建"我自己的启动器快速搜索栏",即谷歌现在发射器.
我怎样才能做到这一点.我已经通过多个线程但没有找到任何相关的答案.
我不想显示widget picker
.我希望asap用户安装此启动器搜索栏应该在那里.
提前致谢.
我是Android开发世界的新手,我已经构建了一个简单的"Hello World"应用程序.首先,活动请求文本.单击"开始"按钮后,应用程序将启动显示输入文本的第二个活动.
如果我单击HOME按钮然后单击应用程序图标,应用程序将再次启动第一个活动,但如果我按住主页按钮并单击"最近的应用程序"栏中的图标,它将恢复我离开的应用程序.
我该如何避免这种情况?
即使单击了启动器图标,我也需要恢复应用程序.
MainActivity.java,
package com.example.myfirstandroidapp;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/** Called when the user clicks the Send button */
public void …
Run Code Online (Sandbox Code Playgroud) 在给Android启动器图标圆角时,是否有任何关于边缘半径应该是多少像素的官方指南?
我已经找到了启动器图标像素大小的指南(但没有提到圆角),这是一个名为Android Asset Studio的工具,可以为你的角落(但是该工具在每个图标的边缘周围提供了不需要的和不可配置的填充) ,以及另一个名为Icon Slayer的工具(但该工具创建的角落让我感觉太圆了,感觉非常iOS).
我还注意到,在我个人使用的所有应用程序中,它们的启动器图标上都有圆角,边缘半径似乎总是因图标而异.当我将各种图标放在一起时,有些图标看起来非常接近,但它们大多只是彼此感觉有点偏离.
有帮助吗?
android dimensions rounded-corners android-icons android-launcher
我在使用小部件时遇到了困难.从http://developer.android.com/guide/practices/ui_guidelines/widget_design.html#cellstable上读取下表:
所以我的小部件想要看起来像一个发射器,它将minHeigth和minWidth作为40dp.到目前为止,我所做的是使用图标作为启动器,192px,144px,96px,72px和48px.
但我无法获得作为图标发射器的确切感觉(文字风格,动人风格......).我可以尝试猜测但是......在哪里可以找到启动器布局的源代码?我找不到它.在与其他图标进行比较时,查看小部件的外观:
我想尝试的另一件事是制作绿色图标以填充所有单元格(作为背景),然后填充另一个图像和文本.我也不能让它看起来不错,我想知道唯一的方法是在这里使用9patch图像......
到目前为止,这是我的小部件布局代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/appwidget_button"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:src="@drawable/widget_1_background"/>
<TextView
android:id="@+id/appwidget_text"
android:typeface="sans"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="@android:color/white"
android:textSize="12sp"
android:singleLine="true"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
建议?
android widget android-widget android-layout android-launcher
我想在应用程序启动器中将同一个图标下的多个应用程序分组.例如,5个应用程序,每个显示1个不同的图像.但是这5个应用程序应该在Android市场上作为单独的应用程序出现,因此它们需要具有不同的包名称.
但是不同的包名称意味着在Android设备上它们将在应用程序启动器中显示为5个单独的应用程序,我试图避免这些应用程序.
我发现的最接近的解决方案是侦听PACKAGE_ADDED
广播事件,每那些5另一个应用程序安装在设备上时,所有已经安装的应用程序会调用setApplicationEnabledSetting
从PackageManager
隐藏的图标,让刚安装处理事情的应用.但只有在重启设备后才会隐藏图标.
有没有办法强制应用程序启动器在运行时刷新?或者还有其他方法来解决我的目标吗?我的选项已经用完了.谢谢!
我将我的活动设置为默认启动器,以拦截主页按钮点击,如下所示:
<activity
android:name=".ExampleActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
当我的活动ExampleActivity
启动时,如果我点击该home键,我会被提示选择.如果我选择将此设为我的默认设置并选择我的活动,我会陷入我的活动中.
问题是,当我离开活动时,我尝试从默认启动器中删除我的活动,但是不成功.
我试过了:
ComponentName componentName = new ComponentName(
"com.example.exampleactivity",
"com.example.exampleactivity.class");
pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)
和:
PackageManager pm = getActivity().getPackageManager();
ComponentName name = new ComponentName(this, "com.example.exampleactivity.class");
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
Run Code Online (Sandbox Code Playgroud)
但是我的名字home永远不会被删除.
有没有人有办法解决上述问题?
我只是不想将主页按钮作为特定活动的默认设置,而不是我的整个应用程序.当我离开活动时,应将其删除并恢复为默认值.
android android-intent android-package-managers android-launcher
从Android的API 25开始,通过长按,应用可以在启动器中提供额外的快捷方式:
事实是,我发现你的应用程序可以为启动器提供这些快捷方式,但我无法知道启动器如何获取它们的列表.
由于它是一个相当新的API,并且大多数用户和开发人员甚至不使用它,我找不到有关它的更多信息,特别是因为我想搜索API使用的"另一面".
我试过阅读文档(例如,这里).我没有看到它被提及.仅提及其他应用程序的一部分,但未提及接收器应用程序(启动器).
给定应用程序的包名称,如何使用新API获取所有"应用程序快捷方式"的列表?
是否可以使用它来请求从其中一个创建固定快捷方式?
android ×10
android-launcher ×10
android-qsb ×1
callback ×1
dimensions ×1
icons ×1
kiosk ×1
kotlin ×1
launcher ×1
restart ×1
shortcut ×1
widget ×1