2

BroadcastReceiverと を使用して位置データを Web データベースに更新しようとしていますService

ただし、Galaxy Tab 7.0 Plus で Android 3.2 を使用するには問題があります。

同じアプリケーションが Android 2.3.6 Galaxy Note で非常にうまく動作しますが、タブレットでは動作しません。RECEIVE_BOOT実際、インテント アクションをレシーバーに追加しましたが、インスタンス化されることはありません。つまり、nReceive()ブートの完了後に o が呼び出されることはありません。このアクションを引き起こすシステムの更新があるかどうか疑問に思います.

ここに私のxmlとレシーバークラスがあります:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tests.bootreceiver"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="15" />

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

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <receiver
        android:name=".BootUpReceiver"
        android:enabled="true"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

    <service android:name=".MyService" >
    </service>
</application>

BootUpReceiver.java

public class BootUpReceiver extends BroadcastReceiver {

private static int INTERVAL = 1000*15;

@Override
public void onReceive(Context context, Intent intent) {     
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), INTERVAL, pi);
}

}

あるシステムでは同じコードが機能し、別のシステムでは機能しない理由はありますか?

ありがとうございました!

4

2 に答える 2

4

android 3以降、アプリがユーザーによって明示的に開始されるまで、アプリ内のすべてのコンポーネントは実行(ブロードキャストの受信)できなくなります。

これが問題であるかどうかをテストするには、アプリにダミーのアクティビティを追加して開始します。これで、アプリはそれ以降(再起動後でも)インテントを受信できるようになります。

これが問題を説明するAOSPの問題です。

http://code.google.com/p/android/issues/detail?id=18225

「意図したとおりに機能する」ため、閉じられていることに注意してください。これは技術的にはセキュリティ修正です。TIMER_TICKアプリは、ユーザーがアプリを実行したり、アプリが実行されていることを知らなくても、自分で開始するなど、特定のよく知られたブロードキャストインテントを悪用する可能性があります。

于 2012-07-31T16:11:35.657 に答える
2

これをチェックしてください: ブート完了の問題

于 2012-07-31T16:11:08.500 に答える