0

サービス メソッドを含むアラーム サービスのサービス クラスがあります。これらのメソッドは、アラーム サービスがアクティブ化されたときに呼び出されます。私がやりたいことは、サービス クラスで呼び出されるこれらのメソッドの 1 つで別のクラスにインテントを呼び出すことです (アラームが鳴ったとき)。インテントを呼び出すときにエラーにフラグを立てるだけです。これは、アラーム サービスがアクティブ化されたときに呼び出されるメソッド (サービス クラスのメソッド) でのみ発生します。これはクラスのためでありextends Service、そうではありませんextends Activityか?よくわかりませんが、アイデアはありますか?

(以下は私のサービスクラスです。別のアクティビティへのインテントがonStartメソッドで呼び出され、アプリが強制的に閉じられます。)

public class MyAlarmService extends Service {
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onCreate()", Toast.LENGTH_LONG).show();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onBind()", Toast.LENGTH_LONG).show();
        return null;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Toast.makeText(this, "MyAlarmService.onDestroy()", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onStart(Intent intent, int startId) {
        // TODO Auto-generated method stub
        super.onStart(intent, startId);

        Toast.makeText(this, "MyAlarmService.onStart()", Toast.LENGTH_LONG).show();

        //////////////////////////////////////////////////////////////////////////////////

        Intent i = new Intent("com.exercise.AndroidAlarmService.HELLO"); 
        startActivity(i); 

        The intent that is send to open another class, an activity.
        **

        /////////////////////////////////////////////////////////////////////////////////
    }

    @Override
    public boolean onUnbind(Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(this, "MyAlarmService.onUnbind()", Toast.LENGTH_LONG).show();
        return super.onUnbind(intent);
    }
}

LogCat のこれらのエラーの 1 つは次のとおりです。

06-24 01:11:36.857: E/AndroidRuntime(10805): java.lang.RuntimeException: Intent { flg=0x4 cmp=com.exercise.AndroidAlarmService/. MyAlarmService (エキストラあり) }: android.util.AndroidRuntimeException: アクティビティ コンテキストの外部から startActivity() を呼び出すには、FLAG_ACTIVITY_NEW_TASK フラグが必要です。これは本当にあなたが望むものですか?

4

3 に答える 3

2

エラーログが示唆することを試しましたか?

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
于 2012-06-24T00:36:06.367 に答える
0

他の人が提案したようにフラグを有効にすることでそれを行うことができます。デフォルトで防止されている理由は、サービスがバックグラウンドでシステムによって自動再起動される傾向があるためです。サービスの onStart 中にアクティビティを開始している場合、このアクティビティは、ユーザーが何をしているかに関係なく開始されます。これは悪いユーザー エクスペリエンスになります。この警告を念頭に置いて、このシナリオを回避してください。

于 2013-05-04T05:32:05.690 に答える
0

サービスを使用してアクティビティを呼び出すことができonStart()ます.....

@Override 
public void onStart(Intent intent, int startId)  { 
    ...
    Log.i("Service", "onStart() is called"); 
    Intent callIntent = new Intent(Intent.ACTION_CALL); 
    callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    callIntent.setClass(<Set your package name and class name here>);
    startActivity(callIntent);
    ...

}
于 2012-06-24T01:24:56.817 に答える