1

Ich möchte einen Dienst starten, wenn mein Dialer (Standard oder Aktienwähler) öffnen. Mein Dienst röstet gerade eine Nachricht. Wie starte ich den Dienst für Dialer? Der startService Befehl funktioniert in MainActivity, aber es funktioniert nicht, während ein Dialer geöffnet ist.So starten Sie den Dienst im Dialer (Standard oder Stock Dialer) von Android

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>  

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.chatheads"> 

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
<uses-permission android:name="android.permission.DIAL_ACTION" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 


    <application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

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

    <activity android:name=".SecondActivity"></activity> 
</application> 

</manifest> 

MainActivity.java

package com.example.chatheads; 

import android.support.v7.app.AppCompatActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.text.method.DialerKeyListener; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 


public class MainActivity extends AppCompatActivity { 
Button startService,stopService; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    startService=(Button)findViewById(R.id.startService); 
    stopService=(Button)findViewById(R.id.stopService); 




    if(getIntent().getAction().equals(Intent.ACTION_DIAL)) { 
     Intent intent = new Intent(getBaseContext(), MyService.class); 
     startService(intent); 

    } 

    startService.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      startService(new Intent(getApplication(), MyService.class)); 




     } 
    }); 
    stopService.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      stopService(new Intent(getApplication(), MyService.class)); 



     } 
    }); 


    } 
} 

Myservice.java

:

Mein Code ist unten dargestellt

package com..service; 

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 
import android.widget.Toast; 

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

    } 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
    intent.getStringExtra("MY_MESSAGE"); 
    //stopSelf(); 
    return super.onStartCommand(intent, flags, startId); 
} 
@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_LONG).show(); 

} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

} 

Dieser Code funktioniert nicht. Der Dienst wird gestartet, wenn der startService MainActivity aufruft. Aber wenn ein Dialer öffnet, funktioniert es nicht.

Antwort

0

Ich denke, vielleicht können Sie versuchen, getApplication() zu MainActivity.this zu ändern.

Und ich denke, Sie müssen von der Dialer zu MainActivity springen, um den Dienst zu starten