2017-01-05 1 views
0

В коде Toast работает хорошо, но намерение поделиться использовать под тоста роняет app.Please помощь, чтобы использовать намерение (используется для обмена текст, скопированный для определенного пакета) отлично по мере копирования текста.Намерение сбой приложения, как он был использован в Clipboard службы - Android

public class Clipboard extends Service { 
    private ClipboardManager mCM; 
    IBinder mBinder; 
    int mStartMode; 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
     mCM.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { 
      @Override 
      public void onPrimaryClipChanged() { 
      String newClip = mCM.getText().toString(); 

      Toast.makeText(getApplicationContext(), newClip.toString(), Toast.LENGTH_LONG).show(); 
      Log.i("LOG", newClip.toString() + ""); 
      //intent starts ,this crashes the app 
      Intent sendIntent = new Intent(Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      sendIntent.setClassName("com.package","com.package.activity"); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, newClip.toString()); 
      startActivity(sendIntent); 
      } 
     }); 
     return mStartMode; 
    } 

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

MainActivity:

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    startService(new Intent(this, Clipboard.class)); 
}} 
+1

Какое исключение вы видите в LogCat? – rekire

ответ

0

Я думаю, вы должны добавить эту строку в свой код.

public class Clipboard extends Service { 
private ClipboardManager mCM; 
IBinder mBinder; 
int mStartMode; 
@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    mCM = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
    mCM.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { 

     @Override 
     public void onPrimaryClipChanged() { 
      String newClip = mCM.getText().toString(); 

      Toast.makeText(getApplicationContext(), newClip.toString(), Toast.LENGTH_LONG).show(); 
      Log.i("LOG", newClip.toString() + ""); 
//intent starts ,this crashes the app 
      Intent sendIntent = new Intent(Intent.ACTION_SEND); 
      sendIntent.setType("text/plain"); 
      sendIntent.setClassName("com.package","com.package.activity"); 
      sendIntent.putExtra(Intent.EXTRA_TEXT, newClip.toString()); 

**//this flag is missing i think** 

      sendIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

      startActivity(sendIntent); 

       } 
      }); 
      return mStartMode; 
     } 


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

что это за флаг – Sarath

+0

Это сработало отлично. Но объясните мне, что здесь делает флаг? – Sarath

+0

, но намерение открывает приложение более одного раза, в чем проблема? – Sarath

0

Я думаю, что проблема в линии ниже

sendIntent.setClassName("com.package","com.package.activity"); 

Try, чтобы прокомментировать или дать правильное название действия и не забудьте зарегистрировать данную деятельность имя в манифесте и запустите свой код.

Надеюсь, это вам поможет!

+0

пакеты не проблема Я попробовал их – Sarath

Смежные вопросы