我想创建一个可以在后台执行某些操作的应用程序(我已经编程了),当你按下例如:chrome,facebook,youtube,...时分享按钮...
现在我有一项活动开始,但我只想在特定页面上打开浏览器。没有打开活动0.5秒所以我可以从意图中获取网址,然后打开浏览器。
我已经看到您需要使用服务,但我怎样才能从意图中获取资源,因为您无法调用getIntent();
这是我的代码。
public class Share扩展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));
}
}
}
}
编辑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));
}
}
}
}
我的活动就是这个。
public class Share扩展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(intent);
上得到一个nullpointer异常我的活动的正确性(故障在哪里)
public class Share extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, ShareService.class));
finish();
}
}
答案 0 :(得分:1)
我想创建一个可以在后台执行某些操作的应用程序(我已经编程了),当您按下例如:chrome,facebook,youtube
中的共享按钮时
ACTION_SEND
仅用于活动。您需要有一项活动,例如您工作的活动。欢迎该活动通过startService()
开始提供服务,如果它选择的话。
如何从意图中获取资源,因为您无法调用getIntent()
您的活动可以通过与Intent
一起使用的startService()
将所需的任何详细信息传递给服务。该服务将获得Intent
中onStartCommand()
的副本。