Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置多个home launcher应用程序不会';行不通_Android_Android Event_Android Launcher - Fatal编程技术网

Android 设置多个home launcher应用程序不会';行不通

Android 设置多个home launcher应用程序不会';行不通,android,android-event,android-launcher,Android,Android Event,Android Launcher,背景信息:我想创建一个儿童锁应用程序。因此,当用户在应用程序中时,我需要禁用所有密钥(包括主密钥)。我基本上想要一个类似的应用程序 问题:如果我将另一个应用程序设置为默认的home launcher(即HTC中的home Sense UI,或三星手机中的类似应用程序),然后将我的应用程序设置为默认的home launcher,则按home键会将我带回到主屏幕(即使我将我的应用程序设置为默认的home launcher!)。现在,如果我没有将任何其他应用程序设置为默认的home launcher,

背景信息:我想创建一个儿童锁应用程序。因此,当用户在应用程序中时,我需要禁用所有密钥(包括主密钥)。我基本上想要一个类似的应用程序

问题:如果我将另一个应用程序设置为默认的home launcher(即HTC中的home Sense UI,或三星手机中的类似应用程序),然后将我的应用程序设置为默认的home launcher,则按home键会将我带回到主屏幕(即使我将我的应用程序设置为默认的home launcher!)。现在,如果我没有将任何其他应用程序设置为默认的home launcher,只有我自己的应用程序,那么就没有问题了,当我在应用程序中并按下home键时,我会留在应用程序中

为什么在我将应用程序设置为默认应用程序之前设置默认主应用程序时,主密钥不起作用(即离开我的应用程序)?但是当我只将我的应用程序设置为默认值时,Home键起作用(即,保留在我的应用程序中)

下面是我的测试应用程序的示例代码:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testspinner"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.testspinner.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

MainActivity.java:

public class MainActivity extends Activity {

    private PackageManager pm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.pm = getPackageManager();
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public boolean isHomeActivity() {
        final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
        filter.addCategory(Intent.CATEGORY_HOME);

        List<IntentFilter> filters = new ArrayList<IntentFilter>();
        filters.add(filter);

        final String myPackageName = getPackageName();
        List<ComponentName> activities = new ArrayList<ComponentName>();
        final PackageManager packageManager = (PackageManager) getPackageManager();

        packageManager.getPreferredActivities(filters, activities, null);

        for (ComponentName activity : activities) {
            if (myPackageName.equals(activity.getPackageName())) {
                return true;
            }
        }
        return false;
    }

    protected void onResume() {
        super.onResume();
        if (!isHomeActivity()) {
            Intent localIntent = new Intent(Intent.ACTION_MAIN);
            localIntent.addCategory(Intent.CATEGORY_HOME);
            localIntent.setComponent(new ComponentName("android",
                    "com.android.internal.app.ResolverActivity"));
            startActivity(localIntent);
        }
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_BACK: {
            finish();
        }
        }
        return false;
    }
}
公共类MainActivity扩展活动{
私人包装经理;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
this.pm=getPackageManager();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
公共布尔值isHomeActivity(){
最终IntentFilter筛选器=新IntentFilter(Intent.ACTION\u MAIN);
filter.addCategory(Intent.CATEGORY\u HOME);
列表过滤器=新的ArrayList();
过滤器。添加(过滤器);
最后一个字符串myPackageName=getPackageName();
列表活动=新建ArrayList();
最终PackageManager PackageManager=(PackageManager)getPackageManager();
packageManager.getPreferredActivities(筛选器、活动、空);
for(组件名称活动:活动){
if(myPackageName.equals(activity.getPackageName())){
返回true;
}
}
返回false;
}
受保护的void onResume(){
super.onResume();
如果(!isHomeActivity()){
Intent localIntent=新意图(Intent.ACTION\u MAIN);
localIntent.addCategory(Intent.CATEGORY\u HOME);
setComponent(新组件名(“android”),
“com.android.internal.app.ResolverActivity”);
开始触觉(局部内容);
}
}
@凌驾
公共布尔onKeyDown(int-keyCode,KeyEvent事件){
开关(钥匙代码){
case KeyEvent.KEYCODE\u返回:{
完成();
}
}
返回false;
}
}
activity_main.xml:

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

您可以在Github上查看此项目:

这是一个可以正常工作的家庭应用程序

我看不出是什么造成了你所描述的行为。这可能是一个特定于设备的问题


设置应用程序后是否尝试重新启动?

如果您使用的是特定版本的Android,您实际上必须清除已设置为默认的应用程序的默认设置。我和你有同样的问题。然后我在应用程序市场上查看了名为Froyo Home Switcher的应用程序。在该应用程序中,如果设置了默认值,Home Switcher会打开默认启动器的应用程序设置屏幕,并告诉用户选择“清除默认值”按钮。这是我知道的唯一方法

所以在你的应用程序中,你必须检查一些不同的东西

  • 如果没有设置默认启动器,请设置您的(就像您上面所说的,它已经工作了)

  • 如果设置了默认设置,则启动其应用程序设置,提示用户选择“清除默认设置”,然后让他们按主页按钮并选择您的应用程序

  • 我希望这有帮助,我不知道我是否是询问代码示例的最佳人选,因为我的应用程序仍然有点问题,但我可以向您指出一些堆栈溢出的答案:


    祝你好运,如果你卡住了(雅虎的lus u s_v[i]r),请发电子邮件给我-忽略括号和空格

    我实际上有4部手机可以测试:HTC Desire(安卓2.2)、HTC One s(安卓4)、三星Galaxy S2 X和三星Galaxy S3。所有这些手机都有相同的问题。我知道,这个问题很奇怪,毫无意义。我将看一看Github上的项目。我看了一下召唤应用程序,那一个稍有不同…它有更多的问题。如果在初始启动期间,我没有将其设置为home launcher,则在后续启动时将不会弹出将其设置为home launcher的提示,因此您只有一次机会将其设置为默认启动程序,此后您将无法……感谢您提供的有用提示!虽然,我现在还是不想在我的应用程序中这样做,但如果这是唯一的解决方法,那么我必须这样做。我会在接下来的几天里做更多的挖掘工作,如果我找到另一个解决方法,我一定会与大家分享!