0

こんにちは、現在、アラーム マネージャーとサービスを使用して Android に通知機能を実装していますが、Android デバイスでアプリケーションを起動すると、「最近のアプリ」リストからアプリを削除すると、アプリが予期せず停止したというエラー メッセージが表示されます。ホームボタンを押し続ける。アプリケーションが「最近のアプリ」リストから削除されていない場合、正常に動作します。

ここで私が間違ったことを誰かアドバイスできますか? 返信ありがとうございます。

ユーザーが通知を受け取るかどうかを決定できるアクティビティがあります。次に、値が Trade.java に渡されます

トレードジャバ

//the part where alarm manager is trigger
if(spApp_checkbox.getBoolean("checkbox", false) == true){
            if(spApp_checkbox.getInt("time", 0) <= 10){
                setTime = 60*1000;
            }
            else{
                setTime = spApp_checkbox.getInt("time", 0)*1000;
            }
            Calendar calender = Calendar.getInstance();
              AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
              intent.setClass(this, MyService.class);

              PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
              alarm.setRepeating(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), setTime, pendingIntent);
              this.startService(intent);
        }
        else{
            AlarmManager alarmManagerstop = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
              Intent intentstop = new Intent(this, MyService.class);
              PendingIntent senderstop = PendingIntent.getService(getApplicationContext(), 0, intentstop, 0);
           // Cancel alarms
              try {
                  alarmManagerstop.cancel(senderstop);
              } catch (Exception e) {
                  Log.e("TAG", "AlarmManager update was not canceled. " + e.toString());
              }
              this.stopService(intentstop);
        } 

MyService.java

public class MyService extends Service {

    private static String SOAP_ACTION1 = "http://pagecode/getTradeControlList_ByParameters";
    private static String NAMESPACE = "http://pagecode";
    private static String METHOD_NAME1 = "getTradeControlList_ByParameters";
    private static String URL = "";
    @Override
    public IBinder onBind(Intent intent) {
           // TODO: Return the communication channel to the service.
           throw new UnsupportedOperationException("Not yet implemented");
    }

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

    @Override
    public void onDestroy() {
           // TODO Auto-generated method stub
           //Toast.makeText(getApplicationContext(), "Service Destroy", 1).show();
           super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
           // TODO Auto-generated method stub
           // action to determine whether notification will be trigger
           Vector<SoapObject> obj1_new = showTrade(callby, tradeCrtl, days);
        int[] id_new = new int[obj1_new.size()];
        if(obj1_new != null){
            for (int i = 0; i < obj1_new.size(); i++) {
                    id_new[i] = Integer.valueOf(words[0]);

                    if(!hm.containsKey(id_new[i])){
                        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);

                        PendingIntent in = PendingIntent.getActivity(getApplicationContext(), 0, intent_tr, 0);
                        System.out.println("list changes");
                        mBuilder.setContentTitle("Application")
                        .setContentText("New trade available")
                        .setProgress(0, 0, false)
                        .setSmallIcon(R.drawable.ic_logo)
                        .setDeleteIntent(in)
                        .setAutoCancel(true);

                    mBuilder.setContentIntent(in);
                    mNotificationManager.notify(0, mBuilder.build());
                    hm = new HashMap();
                    }           
            }

            for (int j = 0; j < obj1_new.size(); j++) {
                hm.put(id_new[j], id_new[j]);

            }
        }
           return super.onStartCommand(intent, flags, startId);
    }
}

マニフェスト.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.app"
    android:versionCode="1"
    android:versionName="1.0" >

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

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_logo"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.android.app.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="com.android.app.AppSettings"></activity>
        <activity android:name="com.android.app.Trade"
            android:windowSoftInputMode="stateHidden|adjustPan"></activity>

        <service
            android:name="com.android.app.MyService" 
            android:enabled="true"            
            android:exported="true" >
        </service>
    </application>

</manifest>
4

1 に答える 1

1

サービスの onstartCommand() メソッドの戻り値として START_STICKY を追加してみてください

于 2013-07-19T15:52:05.687 に答える