0

嗨,我开发了一个使用活动的服务应用程序,它在 2.2 和 2.3 android 版本中运行良好,它在启动时启动并在 30 分钟内运行我的应用程序一次并将位置发送到服务器,但在 4.0 中,应用程序未在启动时在服务上运行谁能告诉我为什么?

我的代码:

广播接收器.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");
        }
    }
}

服务.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>

谢谢你。

4

3 回答 3

1

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

检查此以获取更多详细信息。

于 2013-05-03T06:53:34.513 回答
0

你应该添加 add android.permission.RECEIVE_BOOT_COMPLETED,

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

于 2013-05-03T06:47:32.827 回答
0

发生这种情况是因为Android 3.1+您的服务不会在启动时运行,除非您在安装后至少启动(启动)您的应用程序一次。因此,当您安装应用程序并在启动应用程序 MainActivity 之前重新启动设备时,您的 BroadCastReceiver 将不会被触发。为此,您必须启动 MainActivity 一次,然后重新启动设备。这样可行!

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

于 2013-05-03T06:52:43.053 回答