2016-05-29 82 views
3

在NativeScript的当前状态下是否可以创建一个在Android上监听共享意图的应用程序?我可以分享到我的NativeScript应用程序吗?

我想实现的目标是例如让我的网页浏览器在Android上打开网站,点击共享并在共享目标列表中看到我的NativeScript应用程序。

我在原生Android应用上完成了这项工作,但无法让它在NativeScript应用中工作。我搞砸了AndroidManifest.xml以将

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

转化为intent-filter,但这并没有帮助。我的应用没有显示在共享目标列表中。

回答

1

NativeScript应该支持这种开箱即用的方案。下面是我在默认的app/App_resources/Android AndroidManifest自举程序是这样的:

<activity 
     android:name="com.tns.NativeScriptActivity" 
     android:label="@string/title_activity_kimera" 
     android:configChanges="keyboardHidden|orientation|screenSize"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:mimeType="text/plain" /> 
     </intent-filter> 
</activity> 

编辑: 非常简单的实现发送意图我的任何其他应用程序:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent sendIntent = new Intent(Intent.ACTION_SEND); 
       sendIntent.setType("text/plain"); 
       sendIntent.putExtra("string", "the data Im sending you"); 

       Intent chooser = Intent.createChooser(sendIntent, "Share with "); 

       if (sendIntent.resolveActivity(getPackageManager()) != null) { 
        startActivity(chooser); 
       } 
      } 
     }); 
+0

我必须在代码中混合一些东西,因为它实际上可以与您的示例一起使用。我不知道如何在我的项目中使用此Java代码片段,但我不需要从我的应用程序发送意图。谢谢@pkanev! – Najki

+0

第二个代码片段是示例代码,演示了如何发送意图,您可以在Android应用程序中使用该意图,还是通过NativeScript应用程序中的JavaScript访问本机Android API(http://docs.nativescript.org /运行时间/机器人/发电机/扩展级接口)。 – pkanev

2

除了intent-过滤器必须添加到您的AppManifest.xml中 确保您重新生成应用程序(生命周期选项可能不会反映AppManifest.xml中的更改)

这是一个NativeScrip T规范的基本每股

var app = require("application"); 

function onShare() { 

    var sharingIntent = new android.content.Intent(android.content.Intent.ACTION_SEND); 
    sharingIntent.setType("text/plain"); 
    var shareBody = "Here is the share content body"; 

    sharingIntent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    sharingIntent.addFlags(android.content.Intent.FLAG_ACTIVITY_NEW_TASK | android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 

    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here"); 
    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); 

    app.android.context.startActivity(sharingIntent); 
} 
exports.onShare = onShare; 
+0

谢谢@ nick-iliev :) – Najki

1

首先更新您的AndroidManifest.xml在app/App_Resources/AndroidManifest.xml中

添加以下类似下面

<application  android:name="com.tns.NativeScriptApplication"  android:allowBackup="true"  android:icon="@drawable/icon"  android:label="@string/app_name" 
       android:theme="@style/AppTheme">  <activity   android:name="com.tns.NativeScriptActivity" 
         android:label="@string/title_activity_kimera"   android:configChanges="keyboardHidden|orientation|screenSize"> 

         <intent-filter> 
       <action android:name="android.intent.action.MAIN" />         
       <category android:name="android.intent.category.LAUNCHER" />   </intent-filter>       
         <intent-filter> 
           <action android:name="android.intent.action.SEND" /> 
           <category android:name="android.intent.category.DEFAULT" /> 
           <category android:name="android.intent.category.APP_BROWSER" /> 
           <data android:mimeType="text/plain" /> 
           <data android:mimeType="image/*" /> 
         </intent-filter> 
         <intent-filter> 
          <action android:name="android.intent.action.SEND_MULTIPLE" /> 
          <category android:name="android.intent.category.DEFAULT" /> 
          <category android:name="android.intent.category.APP_BROWSER" /> 
          <data android:mimeType="image/*" /> 
         </intent-filter> 
           </activity>   <activity android:name="com.tns.ErrorReportActivity"/> </application> 

然后添加以下代码行的意图过滤器在你的app.js

application.android.on(application.AndroidApplication.activityResumedEvent, function (args) { 
     console.log("Event: " + args.eventName + ", Activity: " + args.activity); 
     var a = args.activity; 
     try { 
      var Intent_1 = android.content.Intent; 
      var actionSend = Intent_1.ACTION_SEND; 
      var actionSendMultiple = Intent_1.ACTION_SEND_MULTIPLE; 
      var argIntent = a.getIntent(); 
      var argIntentAction = argIntent.getAction(); 
      var argIntentType = argIntent.getType(); 
      console.log(" ~~~~ Intent is ~~~~ :" + new String(argIntent.getAction()).valueOf()); 
      String.prototype.startsWith = function (str) { 
       return this.substring(0, str.length) === str; 
      }; 
      if (new String(argIntentAction).valueOf() === new String(Intent_1.ACTION_SEND).valueOf()) { 
       if (new String(argIntentType).valueOf() === new String("text/plain").valueOf()) { 
        console.dump(cbParseTextAndUrl(argIntent)); 
       } 
       else if (argIntentType.startsWith("image/")) { 
        console.log(cbParseImageUrl(argIntent)); 
       } 
      } 
      else if (new String(argIntentAction).valueOf() === new String(Intent_1.ACTION_SEND_MULTIPLE).valueOf()) { 
       if (argIntentType.startsWith("image/")) { 
        var Uri = cbParseMultipleImageUrl(argIntent); 
        if (Uri !== null) { 
         var Uris = JSON.parse(Uri); 
         console.log(Uris); 
        } 
       } 
      } 
      function cbParseTextAndUrl(argIntent) { 
       var Patterns = android.util.Patterns; 
       //let Matcher = java.util.regex.Matcher; 
       var ListUrl = []; 
       var text = argIntent.getStringExtra(Intent_1.EXTRA_TEXT); 
       if (new String().valueOf() !== "null") { 
        var Matcher = Patterns.WEB_URL.matcher(text); 
        while (Matcher.find()) { 
         var url = Matcher.group(); 
         ListUrl.push(url); 
        } 
        return { "text": text, "listUrl": ListUrl }; 
       } 
      } 
      function cbParseImageUrl(argIntent) { 
       var imageUri = argIntent.getParcelableExtra(Intent_1.EXTRA_STREAM); 
       if (imageUri != null) { 
        // Update UI to reflect image being shared 
        return imageUri; 
       } 
      } 
      function cbParseMultipleImageUrl(argIntent) { 
       var imageUris = argIntent.getParcelableArrayListExtra(Intent_1.EXTRA_STREAM); 
       if (imageUris != null) { 
        // Update UI to reflect image being shared 
        return JSON.stringify(imageUris.toString()); 
       } 
      } 
     } 
     catch (e) { 
      console.log(e); 
     } 
    }); 

现在你可以分享你的cont从第三方应用程序到您的应用程序。

相关问题