2016-06-11 10 views
0

サービスのみのアプリケーションがあります。以下は私のサービスのコードです、それはデバイスのビルドSMSアプリを呼び出すことができません。サービスはビルド・イン・アプリを通じてSMSを送信できません

public class smsservice extends Service { 
private static final String TAG = "MyService"; 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    Log.d(TAG, "Service created."); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    Log.d("TAG", "Service started."); 
    try { 

     String sb = (String) intent.getSerializableExtra("dest1"); 
     Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
     sendIntent.putExtra("sms_body", sb); 
     sendIntent.setType("vnd.android-dir/mms-sms"); 
     startActivity(sendIntent); 

    } catch (Exception e) { 
     Toast.makeText(getApplicationContext(), 
       "SMS faild, please try again later!", 
       Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } 

    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onDestroy() { 
    Log.d("slog", "onDestroy()"); 
    super.onDestroy(); 
} 

}

は、私が行方不明です何かがあるのか​​、それも可能です

答えて

0

私はアプリケーションとを持っているマニフェストファイル

<uses-permission android:name="android.permission.SEND_SMS" /> 

で権限が含まれていサービスのみ

まず、サービスを実行するための計画があることを願っています。デフォルトでは、あなたのアプリには何も実行されません。

第2に、私はあなたがセキュリティガードを買う余裕があることを願っています。あなたにはアクティビティがないので、あなたのサービスが実行される原因は、サービスがエクスポートされた場合だけです。特別なトリックを念頭に置いていない限り、これはすべてのアプリがあなたのサービスにSMSの送信を依頼できることを意味します。これが悪用されると、ユーザーは銃やナイフなどであなたを追いかけることがあります。

第3に、文書化されていないIntentの追加情報を使用せずに、ACTION_VIEWでSMSを送信することをAndroid搭載端末がサポートする必要はありません。 ACTION_SENDまたはACTION_SENDTOを使用してください。

デバイスのビルドインSMSアプリケーションを呼び出すことができません。

あなたはLogCatを見れば、私はあなたがサービスから起動できるようにするIntentFLAG_ACTIVITY_NEW_TASKを追加する必要があることを言及するエラーメッセージが表示されますことを推測しています。 startService()に電話する前にIntentaddFlags(Intent.FLAG_ACTIVITY_NEW_TASK)に電話する必要があります。

これは、通常、ユーザーが行っている作業の途中でアクティビティをポップアップするのは不適切なためです。ユーザーがデバイスで何かをしているかどうかはわかりません。突然、あなたのアクティビティはフォアグラウンドを引き継ぎます。ユーザーはまた、ゲームや映画、ナビゲーション指示などを中断するために銃やナイフを持ってくることがあります。そのため、セキュリティガードを雇うべきです。

私はSmsManager経由でSMSを送信するためであるマニフェストファイル

に権限が含まれています。 ACTION_SENDまたはACTION_SENDTOには必要ありません。

+0

私は明示的な意図で別のアプリを通じてこのサービスを呼び出しています。はい、サービスがエクスポートされます。 –

+0

@ mine0901を呼び出すアプリケーションでstartActivity()またはstartService()を呼び出す前に、IntentでaddFlags(Intent.FLAG_ACTIVITY_NEW_TASK)を呼び出す必要がありますか? 'addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 'あなたは' startActivity() 'に渡す予定です。 – CommonsWare

+0

ありがとうございます。それは私の問題を解決しました。 –

関連する問題