如何在4.0中运行服务?

时间:2013-05-03 06:46:03

标签: android background-service

您好我已经开发了一个使用活动的服务应用程序,它在2.2和2.3安卓版本中运行良好,它在启动时启动并在30分钟内运行我的应用程序一次并将位置发送到服务器但在4.0中应用程序未运行启动服务可以有人说我为什么?

我的代码:

BroadcastReceiver.java:

public class autostart extends BroadcastReceiver {
    public void onReceive(Context arg0, Intent arg1) {
        if ("android.intent.action.BOOT_COMPLETED".equals(arg1.getAction())) {
            Intent intent = new Intent(arg0, gps_back_process.class);
            arg0.startService(intent);
            Log.i("Autostart", "started");
        }
    }
}

service.java:

public class gps_back_process extends Service
{
    private static final String TAG = "MyService";
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.d("Testing", "Service got created");
        Toast.makeText(this, "gps_back_process,onCreate();", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }


    @Override
    public void onStart(Intent intent, int startid)
    {
        Intent intents = new Intent(getBaseContext(),MainActivity.class);
        intents.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intents);
        Toast.makeText(this, "gps_back_process.onCreate();", Toast.LENGTH_LONG).show();
        Log.d(TAG, "onStart");
    }
}

清单:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
        <uses-permission android:name="android.permission.BROADCAST_STICKY" />

    <receiver android:name=".autostart" >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
            </receiver>
<activity android:name=".MainActivity" >
        </activity>

        <service
            android:name=".gps_back_process"
            android:enabled="true" />
    </application>
谢谢。

3 个答案:

答案 0 :(得分:1)

一旦用户第一次运行应用程序(并且不强制停止它),一切都像以前一样 - 重启将导致接收BOOT_COMPLETED广播,依此类推。但是,如果用户安装了应用程序,除非他们手动运行应用程序,否则不会收到任何广播。如果用户强制停止应用程序,除非他们手动运行应用程序,否则不会收到任何广播。

Check this了解更多细节。

答案 1 :(得分:0)

您应该添加添加android.permission.RECEIVE_BOOT_COMPLETED

如果您没有此权限,您的应用将无法收到启动完成的意图。

答案 2 :(得分:0)

这是因为从Android 3.1+起,除非您在安装后至少启动(启动)一次应用程序,否则Service不会在启动时运行。因此,在启动应用程序并在启动Applications MainActivity之前重新启动设备时,将不会触发BroadCastReceiver。为此,您必须启动一次MainActivity,然后重新启动设备。这样可行!

作为参考,您可以在此处查看我的question