我想做的是创建一个无需用户交互即可执行其功能的应用程序。这不应该在设备的应用程序页面上有任何应用程序图标。安装后用户不需要知道设备中运行的应用程序。我尝试在演示应用程序中使用无启动器活动,但它没有运行应用程序代码,这很明显。有没有办法完成这个任务,这有什么意义吗?
问问题
282 次
1 回答
5
是的,这是可能的,而且很有意义。但是,例如,它需要做很多事情。
1)。您需要将您的应用程序设置为启动启动,这意味着每当用户重新启动移动设备或设备时,您的应用程序应自动启动。
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".OnBootReceiver" >
<intent-filter
android:enabled="true"
android:exported="false" >
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver android:name=".OnGPSReceiver" >
</receiver>
2)。显然,您必须制作没有启动器模式的应用程序,因为它是第一个活动,然后将第二个活动称为服务而不是活动。
所以基本上你必须创造这样的东西。
public class AppService extends WakefulIntentService{
// your stuff goes here
}
从你的 mainActivity 调用服务时,像这样定义它。
Intent intent = new Intent(MainActivity.this, AppService.class);
startService(intent);
hideApp(getApplicationContext().getPackageName());
hideApp // 在 mainActivity 之外使用它。
private void hideApp(String appPackage) {
ComponentName componentName = new ComponentName(appPackage, appPackage
+ ".MainActivity");
getPackageManager().setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
3)。然后在清单中定义此服务,如下所示。
<service android:name=".AppService" >
</service>
编辑
WakefulIntentService
是一个新的抽象类。请检查以下。因此,创建一个新的 java 文件并将 beloe 代码粘贴到其中。
abstract public class WakefulIntentService extends IntentService {
abstract void doWakefulWork(Intent intent);
public static final String LOCK_NAME_STATIC = "test.AppService.Static";
private static PowerManager.WakeLock lockStatic = null;
public static void acquireStaticLock(Context context) {
getLock(context).acquire();
}
synchronized private static PowerManager.WakeLock getLock(Context context) {
if (lockStatic == null) {
PowerManager mgr = (PowerManager) context
.getSystemService(Context.POWER_SERVICE);
lockStatic = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
LOCK_NAME_STATIC);
lockStatic.setReferenceCounted(true);
}
return (lockStatic);
}
public WakefulIntentService(String name) {
super(name);
}
@Override
final protected void onHandleIntent(Intent intent) {
doWakefulWork(intent);
//getLock(this).release();
}
}
于 2014-03-04T10:24:43.293 回答