2015-12-21 59 views
0

我想创建一个可以在后台执行某些操作的应用程序(我已经编程该程序),例如按下sharein按钮时,例如:chrome,facebook,youtube ..在随机应用程序中调用共享按钮后的后台服务

现在我有一个活动开始,但我只想打开特定页面上的浏览器。没有打开0.5秒的活动,所以我可以得到的意图,然后打开浏览器的网址。

我已经看到了你需要使用服务,但我怎么能得到的资源走出意图的,因为你不能叫getIntent();

这是我的代码。

公共类分享延伸AppCompatActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_share); 
    Intent intent = getIntent(); 
    if (savedInstanceState == null && intent != null) { 
     Log.d("INTENT", "intent != null"); 

     if (intent.getAction().equals(Intent.ACTION_SEND)) { 
      Log.d("INTENT", "intent.getAction().equals(Intent.ACTION_SEND)"); 
      String url = intent.getStringExtra(Intent.EXTRA_TEXT); 
      System.out.println("url = " + url); 
      ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
      ClipData clip = ClipData.newPlainText("label", url); 
      clipboard.setPrimaryClip(clip); 
      Uri uri = Uri.parse("www.google.be"); 
      startActivity(new Intent(Intent.ACTION_VIEW, uri)); 
     } 
    } 
} 

}

EDIT 1;

public class ShareService extends IntentService { 
    public ShareService(String name) { 
     super(name); 
    } 
@Override 
protected void onHandleIntent(Intent intent) { 
    if (intent != null) { 
     Log.d("INTENT", "intent != null"); 
     if (intent.getAction().equals(Intent.ACTION_SEND)) { 
      Log.d("INTENT", "intent.getAction().equals(Intent.ACTION_SEND)"); 
      String url = intent.getStringExtra(Intent.EXTRA_TEXT); 
      System.out.println("url = " + url); 
      ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
      ClipData clip = ClipData.newPlainText("label", url); 
      clipboard.setPrimaryClip(clip); 
      Uri uri = Uri.parse("http://www.youtube-mp3.org/nl"); 
      startActivity(new Intent(Intent.ACTION_VIEW, uri)); 
     } 
    } 
} 

}

和我的活动是这样的。

公共类股扩展AppCompatActivity {

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = getIntent(); 
    ShareService shareService = new ShareService("Share Service"); 
    shareService.startService(intent); 
    finish(); 
} 

}

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.vanlooverenkoen.youtubtomp3"> 

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


    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity android:name="Share"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

       <data android:mimeType="text/plain" /> 
       <data android:mimeType="image/*" /> 
       <data android:mimeType="video/*" /> 
      </intent-filter> 
     </activity> 
    </application> 
    <service 
     android:name=".ShareService" 
     android:enabled="true" 
     android:exported="true"></service> 
</manifest> 

我得到一个空指针异常的sharService.startService(意向);

MY ACTIVTY(故障所在WAS)的正确优化版本

public class Share extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     startService(new Intent(this, ShareService.class)); 
     finish(); 
    } 
} 

回答

1

我想创建一个应用程序,可以在后台做一些事情(我已经录制的是),当您按下sharebutton in examplein:chrome,facebook,youtube

ACTION_SEND只进行活动。您需要进行一项活动,例如您正在工作的活动。如果可以的话,欢迎通过startService()启动服务。

我如何能得到的资源走出意图的,因为你不能叫getIntent()

您的活动可以通过它希望通过与Intent使用startService()服务的任何细节。该服务将在onStartCommand()中获得Intent的副本。

+0

我需要使用服务还是IntentService?然后如果我使用该服务,活动将显示出来。或者我需要改变我的清单或我的活动? –

+1

@KoenVanLooveren:“我需要使用服务还是IntentService?” - 或者会很好。IntentService可能更简单,取决于你想要的服务。 “如果我使用服务,那么活动将被显示” - 您需要向用户提供一些视觉反馈以进行共享操作。欢迎您使用'Theme.Translucent.NoTitleBar',跳过'setContentView()',并在activity的onCreate()'末尾调用'finish()',但是如果用户对为什么会感到困惑,请不要感到惊讶你的应用程序没有响应共享请求。 – CommonsWare

+0

奥克是这是我需要的,我只需要skipContentView。因为该应用程序只是在默认浏览器中打开某些内容,所以您知道某些内容已更改。我会试试这个 –

相关问题