#java #android
#java #Android
Вопрос:
По сути, я пытаюсь удалить значок приложения и оставить его по-прежнему установленным, используя этот пример: http://www.helloandroid.com/tutorials/removing-app-icon-launcher
Код, который я пытаюсь запустить с помощью android studio, является :
package com.example.root.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.ComponentName ;
import android.content.pm.PackageManager ;
public class java_test extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_java_test);
ComponentName componentToDisable =
new ComponentName("com.nll.acr",
"com.nll.acr.LauncherActivity");
getPackageManager().setComponentEnabledSetting(
componentToDisable,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}
автоматически созданный файл manifest xml содержит :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/activity_java_test"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:exported="true"
tools:context="com.example.root.myapplication.java_test">
<TextView
android:exported="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Ошибка, которую я продолжаю получать, это
EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.root.myapplication/com.example.root.myapplication.java_test}: java.lang.SecurityException: Permission Denial: attempt to change component state from pid=1300, uid=10154, package uid=10150
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2265)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2315)
…
Я просмотрел Интернет и подумал, что мне нужно где-то поместить в xml это ‘android: enabled =»true»‘ , но это просто выдает другую ошибку :
android.view.Исключение InflateException: строка двоичного XML-файла # 15: Ошибка при раздувании класса service
Обновление: я закомментировал строку
getPackageManager().setComponentEnabledSetting(
componentToDisable,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Теперь он работает нормально
Но мне нужно, чтобы эта строка работала, чтобы иметь возможность удалить ярлык
ОБНОВИТЕ 3, если я попробую это :
затем компилятор сообщает, что «layout_height» и «layout_width» отсутствуют
если я попытаюсь :
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize|stateHidden"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<TextView
android:exported="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Он жалуется, что «Ошибка, раздувающая активность класса»
ОБНОВЛЕНИЕ 4 :
если я попытаюсь :
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name=".LoginActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize|stateHidden"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
затем компилятор сообщает, что «layout_height» и «layout_width» отсутствуют
Комментарии:
1. вы проверили, разрешено ли CHANGE_COMPONENT_ENABLED_STATE?
2. также почему android: exported=»true» в Textview?
Ответ №1:
попробуйте это
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize|stateHidden"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
используйте android:exported="true"
внутри manifest
, а не в layout
Комментарии:
1. все еще сталкиваетесь с той же проблемой?
2. да: строка двоичного XML-файла # 14: Ошибка, увеличивающая активность класса
3. Ганеш, я знаю, что неправильно указал «<activity ../>», куда мне его поместить?
4. Я обновил сообщение ОБНОВЛЕНИЯМИ 3 и 4 , я попробовал «<activity ../>» как внутри RelativeLayout , так и получил разные результаты
5. добавьте это в AndroidManifest.xml не в макетах … 3 и 4 являются файлами макета