【问题标题】:android: how to start service from gallery share intentandroid:如何从画廊共享意图启动服务
【发布时间】:2014-05-08 05:54:17
【问题描述】:

我正在开发一个应用程序,它可以让用户通过电子邮件发送照片,而无需打开电子邮件应用程序(用户只需点击分享按钮,应用程序就会自动发送带有照片附件的电子邮件。

为了实现这一点,我想在通过...菜单在图库共享上选择我的应用后直接启动服务。

我现在正在做的是创建一个透明的活动,它工作得很好,但它会阻止用户在发送电子邮件之前浏览画廊

那么我该如何解决这个问题呢?我想我可以创建透明的活动来启动服务,但这真的是实现我想要的最佳方式吗?

编辑(部分代码):

使用图库共享意图时打开透明发送活动的清单

<activity
            android:name="com.VN.PicSharer.sendActivity"
             android:theme="@style/Theme.Transparent"
            android:label="string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />

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

                <data android:mimeType="image/*" />
            </intent-filter>
        </activity>

显示的代码用于从图库中获取数据

public class sendActivity extends Activity {

    Context con;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Intent intent = getIntent();
        String action = intent.getAction();
        File file;
        Bundle extras = intent.getExtras();
        con = getApplicationContext();

        if (Intent.ACTION_SEND.equals(action)) {
            if (extras.containsKey(Intent.EXTRA_STREAM)) {
                try {
//code for sending email with attachment

EDIT2:已解决。 将我的 startActivity 类更改为像服务激活器一样,并在其意图中放置需要附加图片的数据:

intent = new Intent(this, SendService.class);
        Intent mIntent = getIntent();
        Bundle extras = mIntent.getExtras();
        String action = mIntent.getAction();

        intent.putExtra("bundle", extras);
        intent.putExtra("string", action);

        startService(intent);

        onBackPressed();

在我的服务中,我使用 AsyncTask 发送电子邮件(因为没有它,在几秒钟内发送几张照片时,应用程序会在一段时间内冻结)。

希望这可以帮助你们中的一些人!

【问题讨论】:

  • 我添加了一些代码。我现在将尝试用服务替换此活动,并创建其他活动来调用我的服务。

标签: android android-intent gallery share


【解决方案1】:

您可以使用onActivityResult 并检查RESULT_OK 是否是这样,然后继续您想要执行的过程。

-- 执行完你的进程后,在它完成后添加它,这将打开用户主屏幕,让你的设备保持运行。

moveTaskToBack(true);

【讨论】:

  • 我认为这行不通。 javamail返回结果需要一些时间,我想立即关闭我的活动(我的意思是,用户应该在图库共享上单击我的应用程序,并能够在单击我的应用程序意图/按钮后立即导航图库。
  • 好吧,我无法实现你的想法(只是不明白如何),但我成功地找到了一种解决方法 - 从我的透明活动中,我已经使用 asynctask 启动了一个服务。顺便说一句,moveTaskToBack(true) 不知何故把我送到了主屏幕,所以我刚刚使用了 onBackPressed();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2017-07-17
相关资源
最近更新 更多