1

私のダイヤル(デフォルトまたは株ダイヤラー)が開いているときにサービスを開始します。私のサービスはちょうどメッセージを乾杯します。ダイヤラーのサービスを開始する方法。 startServiceコマンドはMainActivityで動作していますが、ダイヤラが開いている間は機能していません。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

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; 
} 

} 

このコードは機能しません。 startServiceがMainActivityを呼び出すときに開始されるサービス。しかし、ダイヤラが開かないと、それは動作しません。

答えて

0

getApplication()MainActivity.thisに変更してみてください。

サービスを開始するには、ダイヤラからMainActivityに移動する必要があると思います。

関連する問題