我正在编写一个(合法的)间谍程序。我想让这个程序隐藏在启动器上(这样就不会显示图标)。我试图从中删除<category android:name="android.intent.category.LAUNCHER" />
行AndroidManifest.xml
,但随后用户无法以首次启动模式(配置)启动应用程序。谁有什么想法?
我该怎么做?
您需要将您的应用程序变成服务。以下是 Android 创建服务组件的过程:
http://developer.android.com/guide/components/services.html
在 MobiWare 上也发现了这个:
当您想在用户不知情的情况下跟踪移动设备的使用情况或收集一些数据时,这可能会对您有所帮助。
Step1:创建一个没有图标的应用程序。通常,活动在清单中声明如下。
<activity
android:label="@string/app_name"
android:name="org.security.tracker.Tracker-activity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
删除类别标签,您将不再获得应用程序图标。现在,你不再需要活动了。所以删除这个部分。但是您可能会想,应用程序将如何在没有任何触发器的情况下运行,或者应用程序的起点是什么。这就是解决方案。
<!-- Start the Service if applicable on boot -->
<receiver android:name="org.security.tracker.ServiceStarter" >
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
这会触发您在 Receiver 中编写的代码,您可以运行服务来实现您的想法。
<service android:name="org.security.tracker.serviceCode" />
您需要添加此权限,
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
您的代码仅在手机重新启动时运行。
步骤 2. 编写您的代码
在重新启动时,接收器将启动,您可以在那里启动您的服务。
class ServiceStarter extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent) {
Intent i = new Intent("com.prac.test.MyPersistingService");
i.setClass(_context, ServiceCode.class);
_context.startService(i);
}
}
您可以<category android:name="android.intent.category.LAUNCHER"/>
从 AndroidManifest.xml 文件中删除 。
但请记住添加<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
,以便 Android Studio 能够编译您的应用程序(但从启动器中隐藏):) :D
消除
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
从清单文件
该应用程序可以通过编程方式隐藏,下面是从启动器菜单中隐藏该应用程序的代码。这也适用于android 10
// App will be hidden when this method will be called from menu
private fun hideApp() {
val packageManager =packageManager
val name =ComponentName(this,MainActivity::class.java)
packageManager.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,PackageManager.DONT_KILL_APP)
Log.d("TAG", "hideApp: success")
}