#android #broadcastreceiver #android-intent
#Android #broadcastreceiver #android-намерение
Вопрос:
Я пытаюсь записывать звонки. Но есть большая проблема при запуске намерения службы.
WARN/ ActivityManager(61): не удается запустить намерение службы { flg= 0x10000000 > cmp=com.company.callrecorder/.CallStateListener }: не найдено
Это мой код Broadcastreceiver:
public class StartServicesAtStartUp extends BroadcastReceiver
{
общедоступное статическое намерение PhoneStateListener;
публичная пустота при получении (контекстный контекст, намерение намерения)
{
Log.d(«DEBUG», «com.its.CallRecorder инициирован …»);
Toast.makeText(контекст, » Запись вызова инициирована .. «, Toast.LENGTH_SHORT).show();
Start_CallRec(контекст);
}
public static void Start_CallRec(Context context)
{
if(!SharedData._Started )
{
if(SharedData._AutoStart)
{
Toast.makeText(context," Call Recording Auto-Start.. ", Toast.LENGTH_SHORT).show();
phoneStateListener = new Intent(context, CallStateListener.class);
phoneStateListener.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startService(phoneStateListener);
Log.d("DEBUG", "com.its.CallRecorder Call Recorder Started ...");
TelephonyManager tManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
CallStateListener callStateListener = new CallStateListener();
tManager.listen(callStateListener,PhoneStateListener.LISTEN_CALL_STATE);
SharedData._Started = true;
Toast.makeText(context," Call Recording Started ... ", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(context," Call Recording Already Active.. ", Toast.LENGTH_SHORT).show();
}
}
public static void Stop_CallRec(Context context)
{
if(SharedData._Started )
{
context.stopService(phoneStateListener);
Toast.makeText(context," Call Recording Stopped ... ", Toast.LENGTH_SHORT).show();
SharedData._Started = false;
}
else
{
Toast.makeText(context," Call Recording Already Stopped ... ", Toast.LENGTH_SHORT).show();
}
}
}
И CallStateListener.java код — это:
public class CallStateListener extends PhoneStateListener {
public void onCallStateChanged(int state, String incomingNumber)
{
super.onCallStateChanged(state, incomingNumber);
switch(state)
{
case TelephonyManager.CALL_STATE_IDLE:
if(SharedData._Recording)
{ Recorders_Stop(); }
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
String CallDate = SanityDate();
String CallNum = SanityNum(incomingNumber);
String RootDir = SharedData._Path ;
String CallDir = SharedData._Path CallNum "/" ;
String CallFile = SharedData._Path CallNum "/" CallNum "-" CallDate ;
if(!SharedData._Recording)
{
SharedData._Recording = true;
String med_state = android.os.Environment.getExternalStorageState();
if(!med_state.equals(android.os.Environment.MEDIA_MOUNTED))
{ break; }
File directory = null;
directory = new File(RootDir "text.txt" ).getParentFile();
if (!directory.exists() amp;amp; !directory.mkdirs())
{ break; }
directory = new File(CallDir "text.txt" ).getParentFile();
if (!directory.exists() amp;amp; !directory.mkdirs())
{ break; }
Recoders_Init(CallFile);
Recorder_Prepare();
}
break;
}
}
Ответ №1:
Я пытаюсь записывать звонки.
Это невозможно, за исключением, возможно, в режиме громкой связи.
Но есть большая проблема при запуске намерения службы.
Это потому, что у вас нет Service
. У вас есть BroadcastReceiver
. A BroadcastReceiver
не является a Service
. Вы не можете звонить startService()
с Intent
идентификатором a BroadcastReceiver
.
Комментарии:
1. Спасибо за ваш ответ CommonsWare. Мне удалось записать звонки с помощью этого кода без использования громкой связи. Проблема связана с записью с различными типами, такими как .3gp, .mp4 и .amr. Когда я решаю проблему повторного запуска mediarecorder, проблема решается спонтанно.