在随机应用程序中调用共享按钮后的后台服务
Background Service after share button called in a random app
我想创建一个应用程序,它可以在您按下分享按钮时在后台执行某些操作(我已经编写了程序)例如在:chrome、facebook、youtube、...
现在我有一个 activity 可以启动,但我只想在特定页面上打开浏览器。无需打开 activity 0.5 秒,这样我就可以从意图中获取 url,然后打开浏览器。
我看到你需要使用服务,但我怎么能从意图中获取资源,因为你不能调用 getIntent();
这是我的代码。
public class 共享扩展 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));
}
}
}
}
我的activity就是这个。
public class 共享扩展 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);
上得到一个空指针异常
我的活动的正确版本(错误所在)
public class Share extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, ShareService.class));
finish();
}
}
I want to create an app that can do something in the background (i have already programed that) when you press the sharebutton in for examplein: chrome, facebook, youtube
ACTION_SEND
只去活动。您将需要一个 activity,例如您正在工作的那个。如果 activity 愿意,欢迎通过 startService()
启动服务。
how can I get the resources out of the intent because you can't call getIntent()
您的 activity 可以通过与 startService()
一起使用的 Intent
将任何它想要的详细信息传递给服务。该服务将在 onStartCommand()
.
中获得 Intent
的副本
我想创建一个应用程序,它可以在您按下分享按钮时在后台执行某些操作(我已经编写了程序)例如在:chrome、facebook、youtube、...
现在我有一个 activity 可以启动,但我只想在特定页面上打开浏览器。无需打开 activity 0.5 秒,这样我就可以从意图中获取 url,然后打开浏览器。
我看到你需要使用服务,但我怎么能从意图中获取资源,因为你不能调用 getIntent();
这是我的代码。
public class 共享扩展 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));
}
}
}
}
我的activity就是这个。
public class 共享扩展 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);
上得到一个空指针异常我的活动的正确版本(错误所在)
public class Share extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, ShareService.class));
finish();
}
}
I want to create an app that can do something in the background (i have already programed that) when you press the sharebutton in for examplein: chrome, facebook, youtube
ACTION_SEND
只去活动。您将需要一个 activity,例如您正在工作的那个。如果 activity 愿意,欢迎通过 startService()
启动服务。
how can I get the resources out of the intent because you can't call getIntent()
您的 activity 可以通过与 startService()
一起使用的 Intent
将任何它想要的详细信息传递给服务。该服务将在 onStartCommand()
.
Intent
的副本