您好我已经开发了一个使用活动的服务应用程序,它在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>
谢谢。
答案 0 :(得分:1)
一旦用户第一次运行应用程序(并且不强制停止它),一切都像以前一样 - 重启将导致接收BOOT_COMPLETED广播,依此类推。但是,如果用户安装了应用程序,除非他们手动运行应用程序,否则不会收到任何广播。如果用户强制停止应用程序,除非他们手动运行应用程序,否则不会收到任何广播。
Check this了解更多细节。
答案 1 :(得分:0)
您应该添加添加android.permission.RECEIVE_BOOT_COMPLETED
,
如果您没有此权限,您的应用将无法收到启动完成的意图。
答案 2 :(得分:0)
这是因为从Android 3.1+
起,除非您在安装后至少启动(启动)一次应用程序,否则Service不会在启动时运行。因此,在启动应用程序并在启动Applications MainActivity之前重新启动设备时,将不会触发BroadCastReceiver。为此,您必须启动一次MainActivity,然后重新启动设备。这样可行!
作为参考,您可以在此处查看我的question。