【问题标题】:Removing activity as a default launcher删除活动作为默认启动器
【发布时间】:2015-04-10 03:49:23
【问题描述】:

我正在尝试将我的活动作为默认启动器删除。我关注了这个link,但得到了错误。以下是我的代码和错误:

lockScreenAppActivity

    @Override
    protected void onResume() {
        ComponentName componentName = new ComponentName(LockScreenAppActivity.this,LockScreenAppActivity.class);
        if (!isMyLauncherDefault()) {
            Log.e("heloooo", "MyActivity is not default home activity!");

            // toggle fake activity
            PackageManager pm = getPackageManager();
            int flag = ((pm.getComponentEnabledSetting(componentName) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) ? PackageManager.COMPONENT_ENABLED_STATE_DISABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
            pm.setComponentEnabledSetting(componentName, flag, PackageManager.DONT_KILL_APP);

            // start home activity to enable chooser
            Intent selector = new Intent(Intent.ACTION_MAIN);
            selector.addCategory(Intent.CATEGORY_HOME);
            startActivity(selector);
        }
        super.onResume();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if ((keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) || (keyCode == KeyEvent.KEYCODE_POWER) || (keyCode == KeyEvent.KEYCODE_VOLUME_UP) || (keyCode == KeyEvent.KEYCODE_CAMERA)) {
            //this is where I can do my stuff
            return true; //because I handled the event
        }
        if ((keyCode == KeyEvent.KEYCODE_HOME)) {

            return true;
        }

        return false;

    }

    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_POWER || (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) || (event.getKeyCode() == KeyEvent.KEYCODE_POWER)) {
            //Intent i = new Intent(this, NewActivity.class);
            //startActivity(i);
            return false;
        }
        if ((event.getKeyCode() == KeyEvent.KEYCODE_HOME)) {

            System.out.println("alokkkkkkkkkkkkkkkkk");
            return true;
        }
        return false;
    }

    boolean isMyLauncherDefault() {
        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();

        // You can use name of your package here as third argument
        packageManager.getPreferredActivities(filters, activities, null);

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

}

错误

启动应用程序: com.example.home.lockscreenapp/com.example.home.lockscreenapp.LockScreenAppActivity。 设备外壳命令:am start -n "com.example.home.lockscreenapp/com.example.home.lockscreenapp.LockScreenAppActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER 警告:链接器:libvc1dec_sa.ca7.so 具有文本重定位。这是浪费内存并且存在安全风险。请修复。 警告:链接器:libvc1dec_sa.ca7.so 具有文本重定位。这是浪费内存并且存在安全风险。请修复。 开始: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.example.home.lockscreenapp/.LockScreenAppActivity } 错误类型 3 错误:活动类 {com.example.home.lockscreenapp/com.example.home.lockscreenapp.LockScreenAppActivity} 不存在。

menifest.xml

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

    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <android:uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />
    <android:uses-permission
        android:name="android.permission.READ_EXTERNAL_STORAGE"
        android:maxSdkVersion="18" />

    <application
        android:icon="@drawable/lockicon"
        android:label="@string/app_name" >
        <activity
            android:name=".LockScreenAppActivity"
            android:label="@string/app_name"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!-- The following two intent-filters are the key to set homescreen -->
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".StartLockScreen"
            android:theme="@style/Theme.Transparent" >

            <!--
        <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>

        <service android:name=".MyService" >
        </service>

        <receiver
            android:name="reciever.lockScreenReeiver"
            android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
        </activity>
    </application>

</manifest>

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    只需尝试清除 packagePreferences getPackageManager().clearPackagePreferredActivities(getPackageName());

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2015-11-15
      • 1970-01-01
      • 2017-01-28
      • 2016-02-24
      相关资源
      最近更新 更多