我想创建一个可以在后台执行某些操作的应用程序(我已经编程该程序),例如按下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();
}
}
我需要使用服务还是IntentService?然后如果我使用该服务,活动将显示出来。或者我需要改变我的清单或我的活动? –
@KoenVanLooveren:“我需要使用服务还是IntentService?” - 或者会很好。IntentService可能更简单,取决于你想要的服务。 “如果我使用服务,那么活动将被显示” - 您需要向用户提供一些视觉反馈以进行共享操作。欢迎您使用'Theme.Translucent.NoTitleBar',跳过'setContentView()',并在activity的onCreate()'末尾调用'finish()',但是如果用户对为什么会感到困惑,请不要感到惊讶你的应用程序没有响应共享请求。 – CommonsWare
奥克是这是我需要的,我只需要skipContentView。因为该应用程序只是在默认浏览器中打开某些内容,所以您知道某些内容已更改。我会试试这个 –