gpt4 book ai didi

安卓 : Run service when my app is not in use

转载 作者:行者123 更新时间:2023-11-30 02:32:55 26 4
gpt4 key购买 nike

在我的应用程序中,我使用 BroadcastReceiver 来跟踪电话状态。

There are 3 states available in TelephonyManager.

  1. EXTRA_STATE_IDLE
  2. EXTRA_STATE_OFFHOOK
  3. EXTRA_STATE_RINGING

在我的场景中,我想显示简单的用户界面,它在电话响铃时显示有关调用者的一些详细信息,我想在用户接听电话或通话结束时关闭该用户界面。

当电话状态为“正在响铃”时,我正在调用我的服务。如果我的应用程序正在使用中,那么我可以在电话响起时看到我的用户界面部分。如果我的应用程序未在使用中,那么我看不到 ui 部分。

enter image description here

我检查了我的背景。该服务未运行。我认为我的服务仅在我的应用程序正在使用时运行,而在我的应用程序未使用时它不运行。

为了克服这个我应该怎么做?

这是我的代码。

@Override
public void onReceive(Context context, Intent intent) {
LoginActivity.login.finish();
MainActivity.main.finish();
telephonyRegister(context,intent);
}
public void telephonyRegister(final Context context, Intent intent)
{
TelephonyManager telephony = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imeiSIM1= telephony.getDeviceId();
System.out.println("IMEI NUMBER"+imeiSIM1);
ctx=context;
if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_IDLE)) {
try
{
ProjectDailogActivity.projdialog.finish();
}catch(Exception e)
{
e.printStackTrace();
}
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_OFFHOOK))
{
try{
ProjectDailogActivity.projdialog.finish();
}catch(Exception e)
{
e.printStackTrace();
}
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
TelephonyManager.EXTRA_STATE_RINGING)){
phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
isringing=true;
Intent intent11 = new Intent(ctx,ProjectDailogActivity.class);
intent11.putExtra("incoming_number",phoneNumber);
intent11.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctx.startActivity(intent11);

}

}

list .xml

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<receiver android:name="com.domyhome.broadcastreceiver.IncomingCallInterceptor" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>

我得到了像 truecaller 一样的窗口。

只是我提到的值是默认值。

但是当我的应用程序未在使用时,不会出现相同的窗口。

请给我一个想法。

最佳答案

这就是 android 开发人员发明 BroadcastReciever 的原因 - 它允许您将代码作为服务 Hook 以响应系统事件(例如启动、飞行模式等)

Vogella 涵盖得很好:http://www.vogella.com/tutorials/AndroidBroadcastReceiver/article.html

对于您的情况(发送命令作为电话状态的响应),您还可以使用这篇文章,它提供了一个完整的示例:http://androidexample.com/Incomming_Phone_Call_Broadcast_Receiver__-_Android_Example/index.php?view=article_discription&aid=61&aaid=86

文章亮点:

    <!-- Manifest.xml -->
<receiver android:name=".IncomingCall">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

在java中——添加这些类

    //your Listener class:
private class MyPhoneStateListener extends PhoneStateListener
{
public void onCallStateChanged(int state, String incomingNumber)
{
// state = 1 means when phone is ringing
if (state == 1)
{
// do something
}
}
}

//Reciever class:
public class IncomingCall extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
// TELEPHONY MANAGER class object to register one listner
TelephonyManager tmgr = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);

//Create Listner
MyPhoneStateListener PhoneListener = new MyPhoneStateListener();

// Register listener for LISTEN_CALL_STATE
tmgr.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}

关于安卓 : Run service when my app is not in use,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27060668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com