こんにちは、私は力が近い
私の問題は、私は(アプリケーションのリストからオフスワイプ)閉じたときに、受信機がもはや機能しないことである、着信コールを聞くために受信機でアプリを作ったとき、レシーバが停止。私が試した
最初にすることは、それ自体がそうのようなアンドロイドマニフェストで定義された受信機である:
<receiver
android:name=".demo.CallReceiver"
android:exported="true"
android:enabled="true">
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
<intent-filter android:priority="999">
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
アプリが開いているか、バックグラウンドである場合にのみ、これは動作します。
私はオンラインを見て、これを見た - https://stackoverflow.com/a/46889335/7079340 ので、私は(マニフェストに)ので、同じように私自身のサービスを作った:
<service android:name=".Service.CallService" android:enabled="true"
android:exported="false"> <intent-filter>
<action android:name="com.package.name.IRemoteConnection" />
</intent-filter>
</service>
とクラス:
public class CallService extends Service {
private static BroadcastReceiver m_Receiver;
@Override
public IBinder onBind(Intent arg0)
{
Log.e("SERVICELOG","bind");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("SERVICELOG","start command");
return START_STICKY;
}
@Override
public void onCreate()
{
Log.e("SERVICELOG","create");
Receiver();
}
@Override
public void onDestroy()
{
Log.e("SERVICELOG","destroy");
try{
unregisterReceiver(m_Receiver);}catch (Exception e){
Log.e("SERVICELOG"," "+e.getMessage());
}
}
private void Receiver()
{
m_Receiver = new CallReceiver();
}
}
はそれを開始私のSplashscreenのoncreateとそれはログを印刷し、それは動作します! サービスなしでこの作業を行う方法は何ですか?私はバッテリーの問題などを恐れていますか?ありがとう!
はい私は自分の質問を編集し、ondestroyを削除して動作させましたが、サービスを常に開いたままにしておくことのコストが心配です。 – yanivtwin
私の意見では、必要になるまでサービスを停止する必要があります。たとえば、SMSメッセージを保持して保存するようにしたい場合(whatsappのようなアプリにいくつかの通知を与えるなど)、開いたままにしておくことができますが、アプリケーションの実行中にサービスを使用する場合は、アプリが閉じられたとき。 –
また、サービスを実行するために値が必要であると仮定します。値がnullの場合、常に「あなたのアプリは停止しました」というメッセージが表示されます。私はいくつかの私のバックグラウンドアプリケーションでそれを経験しました。 –