Извините кодер, если мой пост похож на другой вопрос о сокрытии иконки лаунчера.У меня есть окончательный проект по созданию приложения, которое может сделать значок запуска другого приложения скрытым.Во-первых, я получил свой код, подобный следующему: Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.qp.dev.parentalcontrol">
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"
tools:ignore="ProtectedPermissions"
android:protectionLevel="signature"/>
<uses-sdk
android:minSdkVersion="27"
android:targetSdkVersion="27" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
.java, который показывает мой список приложений и держатель, который скрывает значок запуска других приложений AppListAdapter.java
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
if (convertView == null) {
convertView = inflater.inflate( R.layout.apk_list, parent, false );
holder = new ViewHolder();
holder.apkName = (TextView) convertView.findViewById( R.id.appname );
holder.chboxApk = (CheckBox) convertView.findViewById( R.id.checked_tv );
convertView.setTag( holder );
} else {
holder = (ViewHolder) convertView.getTag();
}
final PackageInfo packageInfo = (PackageInfo) getItem( position );
Drawable appIcon = packageManager.getApplicationIcon( packageInfo.applicationInfo );
String apkName = packageManager.getApplicationLabel( packageInfo.applicationInfo ).toString();
appIcon.setBounds( 0, 0, 80, 80 );
holder.apkName.setCompoundDrawables( appIcon, null, null, null );
holder.apkName.setCompoundDrawablePadding( 15 );
holder.apkName.setText( apkName );
final int adapterPosition = position;
final ViewGroup newParent = parent;
PackageInfo packageInfoPref = (PackageInfo) getItem( adapterPosition );
final String namaPackagePref = packageInfoPref.applicationInfo.packageName;
// buka informasi aplikasi
holder.apkName.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
PackageInfo packageInfo = (PackageInfo) getItem( adapterPosition );
Intent appInfo = new Intent( context.getApplicationContext(), ApkInfo.class );
String namaPackage = packageInfo.applicationInfo.packageName;
String appName = "";
int versi = 0;
String path = "";
int feature = 0;
String waktuInstal = "";
String lastModify = "";
try {
appName = packageManager.getApplicationInfo( namaPackage, 0 ).name;
versi = packageManager.getApplicationInfo( namaPackage, 0 ).targetSdkVersion;
path = packageManager.getApplicationInfo( namaPackage, 0 ).sourceDir;
waktuInstal = setDateFormat( packageInfo.firstInstallTime );
lastModify = setDateFormat( packageInfo.lastUpdateTime );
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Toast.makeText( context, "Nama Package: " + namaPackage
+ "\n\n Nama aplikasi: " + appName
+ "\n\n Versi : " + versi
+ "\n\n Path : " + path
+ "\n\n Install : " + waktuInstal
+ "\n\n Modify : " + lastModify
, Toast.LENGTH_SHORT ).show();
appInfo.putExtra( "namaPackage1", namaPackage );
appInfo.putExtra( "appName1", appName );
appInfo.putExtra( "versi1", versi );
appInfo.putExtra( "path1", path );
appInfo.putExtra( "waktuInstal1", waktuInstal );
appInfo.putExtra( "lastModify1", lastModify );
context.startActivity( appInfo );
}
} );
//checkBox
final ViewHolder viewHolder = new ViewHolder();
PackageManager pakcageNamePrefValue = context.getPackageManager();
SharedPreferences prefs = context.getSharedPreferences(namaPackagePref, 0);
String restoredText = prefs.getString("status", null);
if (restoredText != null) {
int status = prefs.getInt("status", 0); //0 is the default value.
if(status==0){
holder.chboxApk.setChecked( false );
}else if(status==1){
holder.chboxApk.setChecked( true );
}
}
try{
if(holder.chboxApk.isChecked()){
PackageManager p = packageManager;
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage( namaPackagePref );
ComponentName componentName = new ComponentName(namaPackagePref,launchIntent.getComponent().getClassName()); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting( componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP );
}else{
PackageManager p = packageManager;
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage( namaPackagePref );
ComponentName componentName = new ComponentName(namaPackagePref,launchIntent.getComponent().getClassName()); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting( componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP );
}
}catch (Exception e){
e.printStackTrace();
}
holder.chboxApk.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage( namaPackagePref );
Toast.makeText( context, "nama: "+namaPackagePref, Toast.LENGTH_SHORT ).show();
Toast.makeText( context, "" + Objects.requireNonNull( Objects.requireNonNull( launchIntent ).getComponent() ).getClassName(), Toast.LENGTH_SHORT ).show();
boolean isChecked = true;
PackageManager pakcageNamePrefValue = context.getPackageManager();
SharedPreferences.Editor editor = context.getSharedPreferences(namaPackagePref, 0).edit();
if(isChecked){
PackageManager p = packageManager;
ComponentName componentName = new ComponentName(namaPackagePref, Objects.requireNonNull( launchIntent.getComponent() ).getClassName()); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting( componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP );
editor.putInt("status", 1);
editor.apply();
Toast.makeText( context, "checked", Toast.LENGTH_SHORT ).show();
}
else {
PackageManager p = packageManager;
ComponentName componentName = new ComponentName(namaPackagePref,launchIntent.getComponent().getClassName()); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting( componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP );
editor.putInt("status", 0);
editor.apply();
}
}
} );
return convertView;
}
Что я хочу сделать, это скрыть значки запуска других приложений (установить видимость значка).Я попробовал код
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
, чтобы отключить / скрыть приложения, и
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
, чтобы включить / показать значок приложения.Вот список приложений: введите описание изображения здесь
При нажатии кнопки-флажка появляется 2 разных ошибки1. Когда я проверяю system-app, я получаю эту ошибку: введите описание изображения здесь
на java.util.Objects.requireNonNull (Objects.java:203)на com.qp.dev.parentalcontrol.adapter.AppAdapter $ 2.onClick (AppAdapter.java:208)
2. Когда я проверяю не системное приложение, я получаю эту ошибку: введите описание изображения здесь
на android.os.Parcel.readException (Parcel.java:2004)на android.os.Parcel.readException (Parcel.java:1950)в android.content.pm.IPackageManager $ Stub $ Proxy.setComponentEnabledSetting (IPackageManager.java:4732)на android.app.ApplicationPackageManager.setComponentEnabledSetting (ApplicationPackageManager.java:2276)на com.qp.dev.parentalcontrol.adapter.AppAdapter $ 2.onClick (AppAdapter.java:221)
Я намеревался завершить свой окончательный проект, чтобы получить степень бакалавра, создав приложение для родительского контроля.Я надеюсь, что есть способ решить эту программу, потому что я попробовал такое приложение, как Nova Launcher, которое может скрыть другое приложение, например, рай.Спасибо за внимание.