Dans cet article, nous allons faire trois choses principales.
Le code est ici. SharedText
Tout d'abord, ajoutez un filtre d'intention à Manifest.xml.
AndroidManifest.xml
// ...Omission...
<activity android:name=".SharedActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
// ...Omission...
Ensuite, essayez de le recevoir avec SharedActivity.java.
SharedActivity.java
public class SharedActivity extends AppCompatActivity {
TextView textView;
ImageView thumbnail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shared);
textView = findViewById(R.id.movieId);
thumbnail = findViewById(R.id.thumbnail);
Intent intent = getIntent();
String id = null;
if(intent.getType().equals("text/plain")){
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
Log.d("text",text);
}
}
// ...Omission...
}
Vous pouvez maintenant recevoir le lien qui a été transmis au texte par intention.
[référence]
Cela extrait docilement l'ID de la chaîne de lien.
https://youtu.be/yT_ylSCgY6Q
Puisque vous pouvez obtenir la chaîne de caractères comme celle-ci, le «yT_ylSCgY6Q» de fin est l'ID de la vidéo.
Au fait, le lien ci-dessus vous mènera à BUMP OF CHICKEN feat. HATSUNE MIKU "ray".
Pour obtenir des informations sur les vidéos YouTube, comme l'article Obtenir des informations sur les vidéos YouTube à l'aide de Data API v3, ** L'API de données Youtube ** est utilisée. Obtenez la clé API et entrez l'URL suivante dans votre navigateur. Pour plus d'informations sur l'acquisition de la clé API, reportez-vous à Obtention d'informations vidéo YouTube à l'aide de Data API v3.
https://www.googleapis.com/youtube/v3/videos?id=yT_ylSCgY6Q&key=【API Key】&fields=items(id,snippet(channelTitle,title,thumbnails),statistics)&part=snippet,contentDetails,statistics
Entrez la clé acquise dans la partie [Clé API].
Le résultat est le suivant.
result
{
"items": [
{
"id": "yT_ylSCgY6Q",
"snippet": {
"title": "BUMP OF CHICKEN feat. HATSUNE MIKU「ray」",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/yT_ylSCgY6Q/default.jpg ",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/yT_ylSCgY6Q/mqdefault.jpg ",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/yT_ylSCgY6Q/hqdefault.jpg ",
"width": 480,
"height": 360
},
"standard": {
"url": "https://i.ytimg.com/vi/yT_ylSCgY6Q/sddefault.jpg ",
"width": 640,
"height": 480
},
"maxres": {
"url": "https://i.ytimg.com/vi/yT_ylSCgY6Q/maxresdefault.jpg ",
"width": 1280,
"height": 720
}
},
"channelTitle": "BUMP OF CHICKEN"
},
"statistics": {
"viewCount": "12691874",
"likeCount": "65136",
"dislikeCount": "3062",
"favoriteCount": "0",
"commentCount": "4337"
}
}
]
}
[référence]
dependencies {
// ...Omission...
implementation 'com.google.code.gson:gson:2.8.4'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
// ...Omission...
}
[référence]
ApiService.java
public interface ApiService {
@Headers("Accept-Language: ja")
@GET("/youtube/v3/videos?")
Call<APIResponse> requestMovie(@Query("id") String id,
@Query("key") String key,
@Query("fields") String fields,
@Query("part") String part);
}
APIResponse.java
public class APIResponse {
public List<Item> items;
public List<Item> getItems() {
return items;
}
}
Item.java
public class Item {
@SerializedName("id")
private String id;
@SerializedName("snippet")
private Snippet snippet;
@SerializedName("statistics")
private Statistics statistics;
public String getId() {
return id;
}
public Snippet getSnippet() {
return snippet;
}
public Statistics getStatistics() {
return statistics;
}
}
Snippet.java
public class Snippet {
@SerializedName("title")
private String title;
@SerializedName("thumbnails")
private Thumbnails thumbnails;
public class Thumbnails {
@SerializedName("default")
public Default aDefault;
@SerializedName("medium")
public Medium medium;
@SerializedName("high")
public High high;
public High getHigh() {
return high;
}
@SerializedName("standard")
public Standard standard;
@SerializedName("maxres")
public Maxres maxres;
public class Default {
String url;
String width;
String height;
}
public class Medium {
String url;
String width;
String height;
}
public class High {
String url;
String width;
String height;
public String getUrl() {
return url;
}
}
public class Standard {
String url;
String width;
String height;
}
public class Maxres {
String url;
String width;
String height;
}
}
@SerializedName("channelTitle")
String channelTitle;
public String getTitle() {
return title;
}
public Thumbnails getThumbnails() {
return thumbnails;
}
public String getChannelTitle() {
return channelTitle;
}
}
Statistics.java
public class Statistics {
@SerializedName("viewCount")
String viewCount;
@SerializedName("likeCount")
String likeCount;
@SerializedName("dislikeCount")
String dislikeCount;
@SerializedName("favoriteCount")
String favoriteCount;
@SerializedName("commentCount")
String commentCount;
public String getViewCount() {
return viewCount;
}
public String getLikeCount() {
return likeCount;
}
public String getDislikeCount() {
return dislikeCount;
}
public String getFavoriteCount() {
return favoriteCount;
}
public String getCommentCount() {
return commentCount;
}
}
Pendant que j'écrivais l'article, j'ai remarqué que je l'avais écrit sans trop penser aux modificateurs, donc je vous serais reconnaissant si vous pouviez faire quelque chose.
MainActivity.java
public class MainActivity extends AppCompatActivity {
private Retrofit mRetrofit;
private ApiService mService;
//CLÉ API créée à partir de la console
private final String API_KEY = "dummyAPIKey"; //Veuillez modifier la clé API le cas échéant.
private final String FIELDS = "items(id,snippet(channelTitle,title,thumbnails),statistics)";
private final String PART = "snippet,contentDetails,statistics";
// "BUMP OF CHICKEN feat. HATSUNE MIKU「ray」"
private String testId = "yT_ylSCgY6Q";
ImageView picture;
TextView title;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRetrofit = new Retrofit.Builder()
.baseUrl("https://www.googleapis.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
mService = mRetrofit.create(ApiService.class);
picture = findViewById(R.id.picture);
title = findViewById(R.id.title);
button = findViewById(R.id.button);
button.setOnClickListener(onClickListener);
}
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Call<APIResponse> mCall = mService.requestMovie(testId,API_KEY,FIELDS,PART);
mCall.enqueue(new Callback<APIResponse>() {
@Override
public void onResponse(Call<APIResponse> call, Response<APIResponse> response) {
//Obtenir l'élément de la réponse
List<Item> items = response.body().getItems();
for(Item item : items){
Uri uri = Uri.parse(item.getSnippet().getThumbnails().getHigh().getUrl());
Uri.Builder builder = uri.buildUpon();
AsyncTaskHttpRequest task = new AsyncTaskHttpRequest(picture);
task.execute(builder);
title.setText(item.getSnippet().getTitle());
}
}
@Override
public void onFailure(Call<APIResponse> call, Throwable t) {
}
});
}
};
}
De plus, j'ai fait référence au site suivant pour obtenir l'image à partir de l'URL et l'afficher dans ImageView. Notez que même si vous copiez et collez le code ci-dessus, la classe AsyncTaskHttpRequest ne sera pas définie. [référence]
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/picture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title"
app:layout_constraintVertical_bias="0.3" />
</android.support.constraint.ConstraintLayout>
activity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".SharedActivity">
<ImageView
android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.201"
app:srcCompat="@mipmap/ic_launcher" />
<TextView
android:id="@+id/movieId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
AndroidManifest.xml Au cas où, je publierai également le fichier manifeste.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tomiyama.noir.sharedtext">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SharedActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
</application>
</manifest>
[référence] Cela a été très utile lors de l'accès à l'API autour de Retrofit. Aussi, pour plus de détails, reportez-vous au code affiché sur Github.